`
idealab
  • 浏览: 195313 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Struts+Hibernate/JDBC+ExtJS实现人力资源管理系统(一)

    博客分类:
  • Ajax
阅读更多
   前期利用毕业实习的时间开发人力资源系统,实现了基本的组织机构管理,包括部门、职务、岗位管理,时间关系没有实现人员信息的各种操作。前端利用ExtJS框架完成同一个页面的所有操作(完全利用JS代码实现),后台本来利用Spring和Hibernate,无奈Spring用的不够熟练且时间不允许,所以改为Struts了。考虑到一部分数据库访问操作逻辑较简单且频率较低,故利用JDBC处理,而其他的则有Hibernate来处理。
   以下为系统各部分主干代码,稍后会放出代码供下载:
   配置文件:
   struts-config.xml
  
...
<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>
...

hibernate.cfg.xml
...
<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>
...

   
前端主页面JS脚本:
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);
	}
}

分享到:
评论
39 楼 javashiting 2015-05-05  
看看
看看 看看 看看
38 楼 别大号 2010-03-19  
使用Ext渲染一个页面可能要1-5秒(视客户端CPU及浏览器),这是Extjs框架的瓶颈!!

另外,如果用户使用TabPanel标签上的右键菜单一次关闭多个Tab时,由于浏览器要一次移除大量DOM节点,所以浏览器会弹出询问用户是否终止执行脚本的对话框,如果用户选择中终止执行,则会出现某个Tab页的控件被部分移除的局面.

请问楼主对这些有什么见解?
37 楼 xbiii3s 2010-01-06  
楼主回复的很不错啊,很敬业!谢谢共享!
36 楼 yzzh9 2009-12-11  
lbflyseed 写道
部署应用后,登陆不进去啊。用户名good,密码1,

直接在后面打index.jsp进去吧。
35 楼 idealab 2009-11-16  
haizibie453 写道
LZ,怎么跑不起来呀.

应该是缺少Json的jar包。在(二)里上传过的。
这里传上来哈,希望仁兄继续努力。

PS:sorry for late reply!
34 楼 javaAlpha 2009-11-12  
O(∩_∩)O谢谢 楼主分享

最近也在使用ext做项目
33 楼 haizibie453 2009-11-04  
LZ,怎么跑不起来呀.
32 楼 javaAlpha 2009-10-29  
最近使用ext做项目 ,遇到个问题 动态加载js文件,类似163的。在以个Panel里面加载多个tabPanel。每次加载就加载一个。
31 楼 jj_liu 2009-10-19  
idealab 写道
jj_liu 写道
楼主,那些TAB只要打开第一次,以后就会重复加载的喔,不知道怎么解决。还有你的DWR好像没完成。


重复加载有可能是因为Tab面板属性closeAction为hide。
DWR在系统中没有用到。



我查过一下API,好像没有这个属性。我也是新手,想解决一下这个问题。 回为楼主这个做的不错。
30 楼 idealab 2009-10-17  
jj_liu 写道
楼主,那些TAB只要打开第一次,以后就会重复加载的喔,不知道怎么解决。还有你的DWR好像没完成。


重复加载有可能是因为Tab面板属性closeAction为hide。
DWR在系统中没有用到。
29 楼 jj_liu 2009-10-17  
楼主,那些TAB只要打开第一次,以后就会重复加载的喔,不知道怎么解决。还有你的DWR好像没完成。
28 楼 idealab 2009-09-17  
peteronline 写道
idealab 写道
逍遥郎 写道
我想问一下,你的程序是怎样跳到后台去获取数据的?

ExtJS提供后台数据请求控件,如JsonStore,通过配置url和method来对后台发送请求,后台将JSON格式的数据响应给前台。也可以利用请求函数做请求,给出系统中的一段代码:
Ext.Ajax.request({
	url : 'delete.do?type=dept&id=' + pk_dept,
	method : 'GET',
	success : function() {
		Ext.Msg.alert('info', '删除成功');
		deptTree.root.children = false;
		deptTree.root.reload();
	},
	failure : function() {
                //do something
	}
});


楼主:这样写有问题:应该这样修改
Ext.Ajax.request({
url : 'delete.do?type=dept&id=' + pk_dept,
method : 'GET',
success : function(response) {//这个success只是表示是否成功进入方法,而不是方法执行成功
                var responseArray = Ext.util.JSON.decode(response.responseText);

if (responseArray.success) {//这个success才是方法执行成功
                      Ext.Msg.alert('info', '删除成功');
      deptTree.root.children = false;
      deptTree.root.reload();
                }

},
failure : function() {
                //do something
}
});



谢谢关注,我理解了。
success : function(response) {//这个success表示request/response通信成功
if (responseArray.success) //这个success是从后台传回的操作成功的信息。

27 楼 peteronline 2009-09-16  
idealab 写道
逍遥郎 写道
我想问一下,你的程序是怎样跳到后台去获取数据的?

ExtJS提供后台数据请求控件,如JsonStore,通过配置url和method来对后台发送请求,后台将JSON格式的数据响应给前台。也可以利用请求函数做请求,给出系统中的一段代码:
Ext.Ajax.request({
	url : 'delete.do?type=dept&id=' + pk_dept,
	method : 'GET',
	success : function() {
		Ext.Msg.alert('info', '删除成功');
		deptTree.root.children = false;
		deptTree.root.reload();
	},
	failure : function() {
                //do something
	}
});


楼主:这样写有问题:应该这样修改
Ext.Ajax.request({
url : 'delete.do?type=dept&id=' + pk_dept,
method : 'GET',
success : function(response) {//这个success只是表示是否成功进入方法,而不是方法执行成功
                var responseArray = Ext.util.JSON.decode(response.responseText);

if (responseArray.success) {//这个success才是方法执行成功
                      Ext.Msg.alert('info', '删除成功');
      deptTree.root.children = false;
      deptTree.root.reload();
                }

},
failure : function() {
                //do something
}
});
26 楼 idealab 2009-08-19  
winsomexiao 写道

按照lz的压缩包导入到myeclipse中有以下问题:
1.有一堆json的依赖包没有没有在包里,需要自行下载;
2.建库数据库脚本对mysql5的某些版本不支持,需要手工修订脚本;
3.登录用户是good,密码是1,但是sysuser表中对应的用户type是"sysadmin"是错的,和代码里面不一样,要改成"superadmin"
4.此外mysql的用户和密码在在hibernate.cfg.xml和jdbcUtil.java中需要配置的和自己的mysql用户密码一致。

5. 里面少了一些js,比如nav_assign.js,所以在用户管理处就会什么都不显示出来。

这样可以登录到页面,登录进去有些页面数据库链接还有问题
此外,还有一个多于的jboss的包没有用到,但是classpath里面设了,也要去掉。



多谢winsomexiao所提出的这些问题。
当时由于正值马上要找工作,没腾出时间完善系统,只完成了部门管理、职务管理和岗位管理,同时还有些系统性能未能优化,在此表示歉意。系统源码是分两部分发的,由于包含json包的源码太大无法上传,所以第二部分是json的6个依赖包。
25 楼 winsomexiao 2009-08-18  
此外,还有一个多于的jboss的包没有用到,但是classpath里面设了,也要去掉。
24 楼 winsomexiao 2009-08-18  
按照lz的压缩包导入到myeclipse中有以下问题:
1.有一堆json的依赖包没有没有在包里,需要自行下载;
2.建库数据库脚本对mysql5的某些版本不支持,需要手工修订脚本;
3.登录用户是good,密码是1,但是sysuser表中对应的用户type是"sysadmin"是错的,和代码里面不一样,要改成"superadmin"
4.此外mysql的用户和密码在在hibernate.cfg.xml和jdbcUtil.java中需要配置的和自己的mysql用户密码一致。

5. 里面少了一些js,比如nav_assign.js,所以在用户管理处就会什么都不显示出来。

这样可以登录到页面,登录进去有些页面数据库链接还有问题
23 楼 leonclz 2009-07-08  
你能不能别老把你的破项目放到最前面。SB
22 楼 hemin108 2009-07-04  
softherk 写道
为什么我部署后老是显示404错误啊。我访问的网址不对吗?下面是我的访问路径 http://localhost:8080/eHR/login.jsp

我这也是 不知道怎么搞的···
21 楼 woainan6042 2009-07-02  
softherk 写道
为什么我部署后老是显示404错误啊。我访问的网址不对吗?下面是我的访问路径 http://localhost:8080/eHR/login.jsp


把端口号确定下
20 楼 songjingjing520 2009-07-02  
valus of sql is:insert into dept(pk_dept,pk_corp,deptname,depttype,deptduty,addr,tel) values(7,1,'sdfsdf','produce','sdfsdfsdf','sdfsfd','sdfsdfsdf')
1行受影响
插入成功?true2009-7-2 16:43:40 org.apache.catalina.core.ApplicationContext log
信息: Servlet execution threw an exception
2009-7-2 16:43:42 org.apache.catalina.core.ApplicationContext log
信息: Servlet execution threw an exception

相关推荐

Global site tag (gtag.js) - Google Analytics