前期利用毕业实习的时间开发人力资源系统,实现了基本的组织机构管理,包括部门、职务、岗位管理,时间关系没有实现人员信息的各种操作。前端利用ExtJS框架完成同一个页面的所有操作(完全利用JS代码实现),后台本来利用Spring和Hibernate,无奈Spring用的不够熟练且时间不允许,所以改为Struts了。考虑到一部分数据库访问操作逻辑较简单且频率较低,故利用JDBC处理,而其他的则有Hibernate来处理。
以下为系统各部分主干代码,稍后会放出代码供下载:
[b][size=medium]配置文件:[/size][/b]
[color=gray]struts-config.xml[/color]
[color=gray]hibernate.cfg.xml[/color]
[b][size=medium]前端主页面JS脚本:[/size][/b]
以下为系统各部分主干代码,稍后会放出代码供下载:
[b][size=medium]配置文件:[/size][/b]
[color=gray]struts-config.xml[/color]
...
<struts-config>
<data-sources />
<form-beans>
<form-bean name="loginForm"
type="com.idealab.struts.form.LoginForm" />
<form-bean name="newCorpForm"
type="com.idealab.struts.form.NewCorpForm" />
<form-bean name="newUserForm"
type="com.idealab.struts.form.NewUserForm">
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards>
<forward name="index" path="/index.jsp"></forward>
</global-forwards>
<action-mappings>
<!-- 登录 -->
<action attribute="loginForm" input="/login.jsp"
name="loginForm" path="/logon" scope="request"
type="com.idealab.struts.action.LoginAction" />
<!-- 新建不同种类(部门,职务,岗位) -->
<action path="/new" scope="request"
type="com.idealab.struts.action.NewAction" />
<!-- 系统初始化中新建用户 -->
<action attribute="newUserForm" name="newUserForm"
path="/newUser" scope="request"
type="com.idealab.struts.action.NewUserAction" />
<!-- 获得公司 -->
<action path="/getCorp" scope="request"
type="com.idealab.struts.action.GetCorpAction" />
<!-- 加载各种类型的树节点 -->
<action path="/getNodes"
type="com.idealab.struts.action.GetNodesAction" />
<!-- 根据树节点Id加载信息到表单中 -->
<action path="/getById"
type="com.idealab.struts.action.GetByIdAction" />
<!-- 更新信息 -->
<action path="/update"
type="com.idealab.struts.action.UpdateAction" />
<!-- 删除 -->
<action path="/delete"
type="com.idealab.struts.action.DeleteAction" />
</action-mappings>
<message-resources
parameter="com.idealab.struts.ApplicationResources" />
</struts-config>
...
[color=gray]hibernate.cfg.xml[/color]
...
<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/ehr
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="myeclipse.connection.profile">
MysqlDriver
</property>
<property name="connection.password">ideal</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<mapping resource="com/idealab/dao/Sysuser.hbm.xml" />
<mapping resource="com/idealab/dao/Corp.hbm.xml" />
<mapping resource="com/idealab/dao/Emp.hbm.xml" />
<mapping resource="com/idealab/dao/Empdoc.hbm.xml" />
</session-factory>
...
[b][size=medium]前端主页面JS脚本:[/size][/b]
Ext.ns('Ext.mypanels');
Ext.onReady(function() {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';
Ext.mypanels.contentPanel = new Ext.TabPanel({
region : 'center',
id : 'tabPanel',
autoDestroy:false,/*处理页签关闭后无法再次打开的问题*/
deferredRender : false,
activeTab : 0,
iconCls : 'tabs',
items : {
title : '主页',
autoScroll : true,
layout : 'table',
layoutConfig : {
columns : 1
},
items : [{
title : '公告信息',
html : '<img src="lib/images/arch_eHR.jpg" width=830 height=450/>'
}]
}
});
/* 导航栏面板定义 */
var navPanel = new Ext.Panel({
region : 'west',
id : 'nav_panel',
name : 'navPanel',
title : '导航栏',
split : true,
border : true,
collapsible : false,
width : 170,
minSize : 170,
maxSize : 170,
layout : 'accordion',
layoutConfig : {
animate : true,
fill : true,
autoWidth : true
},
items : [{
title : '系统管理',
items : [Ext.mypanels.tree.navAdminTree]
}, {
title : '自助操作',
items : [Ext.mypanels.tree.navSelfinfoTree]
}]
});
Ext.mypanels.tree.navAdminTree.on('click', onClickTreeNode);
Ext.mypanels.tree.navSelfinfoTree.on('click', onClickTreeNode);
/* 主面板 */
var viewport = new Ext.Viewport({
layout : 'border',
items : [{
region : 'north',
contentEl : 'header',
split : true, // 可改变框体大小
border : true,
collapsible : true, // 可收缩
height : 72,
minSize : 72,
maxSize : 72
}, {
region : 'south',
contentEl : 'footer',
split : true,
border : true,
collapsible : true,
height : 35,
minSize : 30,
maxSize : 30
}, navPanel, Ext.mypanels.contentPanel]
});
});
/*动态导入js文件*/
function importJS(src) {
/*
* fpath = fpath.replace(/\./g,'\/'); document.write('<script
* type="text/javascript" src="'+ fpath + '.js"></script>');
*/
src=src.replace(/\./g,'\/');
jpath=src+'.js';
var headerDom = document.getElementsByTagName('head').item(0);
var jsDom = document.createElement('script');
jsDom.type = 'text/javascript';
jsDom.src = jpath;
headerDom.appendChild(jsDom);
}
function onClickTreeNode(node) {
if (node.getDepth() > 1) {
importJS('lib.main.'+node.id);
var n = Ext.mypanels.contentPanel.getComponent(node.id);
if (!n) { // 判断是否已经打开该面板
n = Ext.mypanels.contentPanel.add({
'id' : node.id,
'title' : node.text,
contentEl : 'tab_'+node.id,/*各个模块分别在nav_*.js中定义,且每个模块相应的显示在tab_*区域中*/
closable : true,
iconCls : 'tabs'
/*
* autoLoad : { url : 'nodes.jsp?url='+node.id, scope :
* this, scripts : true } //
* 通过autoLoad属性载入目标页,如果要用到脚本,必须加上scripts属性
*/});
}
Ext.mypanels.contentPanel.setActiveTab(n);
}
}