`
matychen
  • 浏览: 171394 次
  • 性别: Icon_minigender_1
  • 来自: 武汉外来务工人员
社区版块
存档分类
最新评论

Spring3 MVC 教程 (Mybatis+ExtJS基本权限管理)

阅读更多
Spring3 MVC 教程 (Mybatis+ExtJS基本权限管理)
说明:

  • 验证码:采用开源的https://code.google.com/p/kaptcha/,代码自己修改了部分。
  • 上传文件:swfupload,参考论坛里面的另外一个帖子。
  • ext的tab非iframe模式,只加载一次ExtJS,速度还可以~自己命名jsp里面的变量的时候注意变量ID不要重复 参加下面部分js代码
  • 框架采用了mybatis+spring3MVC,应该说是学习springmvc的好例子。代码都有详细注释。
  • js的加载采用了yepnope,是一个基于条件的异步资源(JS和CSS)加载工具
  • mybatis的配置文件的生成采用了自己修改的mybatis的工具。mybatis-generator 修改版



其他:
附件为maven构建的工程,需要lib的可以去网盘下载,里面也有base_power.pdm文件,可以自己转为mysql的脚本。
建库语句在war包里面的readme文件夹下面
7z的分卷压缩老是搞不好,只好贴网盘地址了
http://dl.dbank.com/c0bakwliui
// tab主面板
index.tabPanel = new Ext.TabPanel({
    id: 'mainTabPanel',
    region: 'center',
    activeTab: 0,
    deferredRender: false,
    enableTabScroll: true,
    // bodyStyle:'height:100%',
    defaults: {
        layout: 'fit',
        autoScroll: true
    },
    plugins: new Ext.ux.TabCloseMenu({
        closeTabText: '关闭标签页',
        closeOtherTabsText: '关闭其他标签页',
        closeAllTabsText: '关闭所有标签页'
    }),
    items: [{
        id: 'home',
        title: '我的主页',
        iconCls: 'home',
        closable: false,
        autoScroll: true,
        autoLoad: {
            url: index.welcome,
            scripts: true,
            nocache: true
        }
    }],
    listeners: {
        'bodyresize': function (panel, neww, newh) {
            // 自动调整tab下面的panel的大小
            var tab = panel.getActiveTab();
            var centerpanel = Ext.getCmp(tab.id + "_div_panel");
            if (centerpanel) {
                centerpanel.setHeight(newh - 2);
                centerpanel.setWidth(neww - 2);
            }
        }
    }
});


<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ include file="/WEB-INF/views/commons/taglibs.jsp"%>
<div id="changePwdDiv" style="width: 100%; height: 100%;">
	<div id="changePwdToolBarDiv"></div>
	<div id="changePwdFormDiv"></div>
</div>

<script type="text/javascript">
$(document).ready(function() {
	//yepnope("${ctx}/resources/js/user/changepwd.js");
	Ext.ns("Ext.Authority.changepassword"); // 自定义一个命名空间
	changepwd = Ext.Authority.changepassword; // 定义命名空间的别名
	changepwd = {
		changeurl : ctx + "/user/changepwd"
	};
	// 编辑用户Form
	changepwd.changePwdFormPanel = new Ext.form.FormPanel({
		renderTo : 'changePwdFormDiv',
		border : false,
		defaults : {
			xtype : "textfield",
			labelWidth : 50
		},
		bodyStyle : 'padding:5px;background-color:transparent;',
		items : [ {// 原密码
			id : 'old_password',
			name : 'old_password',
			inputType : "password",
			fieldLabel : '原密码',
			anchor : '99%',
			allowBlank : false,
			maxLength : 32
		}, { // 新密码
			id : 'new_password',
			name : 'new_password',
			inputType : "password",
			fieldLabel : '新密码',
			anchor : '99%',
			allowBlank : false,
			maxLength : 32
		}, {// 确认密码
			id : 'compare_password',
			name : 'compare_password',
			inputType : "password",
			fieldLabel : '确认密码',
			vtype : "password",// 自定义的验证类型
			vtypeText : "两次输入的密码不一致!",
			confirmTo : "new_password",// 要比较的另外一个的组件的id
			anchor : '99%',
			allowBlank : false,
			maxLength : 32
		}, {// 账户ID
			xtype : 'hidden',
			name : 'userId',
			value : '${user.userId}'
		} ]
	});
	// 工具栏
	changepwd.changePwdToolbar = new Ext.Toolbar({
		renderTo : 'changePwdToolBarDiv',
		items : [ new Ext.Button({
			text : '保存',
			iconCls : 'save',
			handler : function() {
				var form = changepwd.changePwdFormPanel.getForm();
				if (form.isValid()) {
					var values = form.getValues();
					// 发送请求
					Share.AjaxRequest({
						url : changepwd.changeurl,
						params : {
							oldPassword : Ext.MD5(values.old_password),
							newPassword : Ext.MD5(values.new_password),
							comparePassword : Ext.MD5(values.compare_password),
							userId : values.userId
						},
						callback : function(json) {
							// 重新登录
							Share.getWin().location = ctx;
						},
						falseFun : function(json) {//失败后想做的个性化操作函数
							if (json.msg.indexOf('原密码不正确!请重新输入') > -1) {
								$("#old_password").focus().val('');
								return;
							}
							if (json.msg.indexOf('两次输入的新密码不一致') > -1) {
								$("#new_password").val('');
								$("#compare_password").val('').focus();
								return;
							}
							if (json.msg.indexOf('请输入正确的帐号和其注册邮箱') > -1) {
								return;
							}
						}
					});
				}
			}
		}), new Ext.Button({
			text : '取消',
			iconCls : 'cancel',
			handler : function() {
				header.changePwdWindow.close();
			}
		}) ]
	});
	var events = "beforecopy beforepaste beforedrag contextmenu selectstart drag paste copy cut dragenter";
	$("#old_password").bind(events, function(e) {
		if (e && e.preventDefault)
			e.preventDefault();
		else
			window.event.returnValue = false;
		return false;
	});
	$("#new_password").bind(events, function(e) {
		return false;
	});
	$("#compare_password").bind(events, function(e) {
		return false;
	});
});
</script>



代码不多贴了,上图片吧。
















  • Authority.7z (1.2 MB)
  • 描述: maven构建
  • 下载次数: 6554
分享到:
评论
48 楼 matychen 2015-11-25  
日后再说吧 写道
你好,链接失效了,能不能发我一份源码学习一下,谢谢!188123642@qq.com

https://github.com/cxjava/authority

贪恋尔的可爱 写道
你好楼主  请问一下,现在下载源码的地址?

https://github.com/cxjava/authority

乘风邀月 写道
你好  请问一下,你的网盘链接不上,现在还有新地址吗?

https://github.com/cxjava/authority
47 楼 日后再说吧 2015-10-21  
你好,链接失效了,能不能发我一份源码学习一下,谢谢!188123642@qq.com
46 楼 日后再说吧 2015-10-13  
你好楼主,能不能发我一份源码学习一下,谢谢!
45 楼 贪恋尔的可爱 2015-09-24  
你好楼主  请问一下,现在下载源码的地址?
44 楼 乘风邀月 2015-08-04  
你好  请问一下,你的网盘链接不上,现在还有新地址吗?
43 楼 kiyaya456 2014-05-27  
最近在看extjs 可以拿来参考参考~~谢谢~~~
42 楼 835065163 2013-12-16  
谢谢你提供的源码,功能都调好了,可以用了,现在我做的项目正好用的是你的框架
41 楼 matychen 2013-12-16  
835065163 写道
楼主用的代码现在我 oracle和mysql都好了 后台不报错,其它功能都是好的,就是权限选择了,用户登录之后还是可以看到全部菜单


应该不会吧,你debug调试下。
40 楼 matychen 2013-12-16  
835065163 写道
楼主有mysql版的吗?我把oracle转换mysql版的之后一直报
13:08:50.062 ERROR c.c.authority.common.jackjson.JackJson - JsonGenerationException:
org.codehaus.jackson.JsonGenerationException: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)

https://github.com/cxjava/authority/tree/mysql 你试一试这个,或者看看那个JPA的分支可以用不?我都很久没有修改这个了。
39 楼 835065163 2013-12-16  
楼主用的代码现在我 oracle和mysql都好了 后台不报错,其它功能都是好的,就是权限选择了,用户登录之后还是可以看到全部菜单
38 楼 835065163 2013-12-16  
楼主有mysql版的吗?我把oracle转换mysql版的之后一直报
13:08:50.062 ERROR c.c.authority.common.jackjson.JackJson - JsonGenerationException:
org.codehaus.jackson.JsonGenerationException: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)
37 楼 matychen 2013-06-20  
ihanfeng 写道
matychen 写道
ihanfeng 写道
你好,关于http://localhost:8080/authority/这个项目的部署问题,我修改成mysql版本后部署运行起来都不会出现的登陆页面。会提出糟糕!此链接好像已损坏。手动输入action会提示 Request method 'GET' not supported 。我是在删除pom.xml压缩js后才成功部署的。

https://github.com/cxjava/authority
你可以去看看
还有,你看看控制台有什么错误输出没?
如果用maven,你可以用maven的tomcat插件或者jetty插件,启动看看,在控制台有具体的访问的url输出的。
tomcat:run
jetty:run


使用jetty:run 可以显示登陆页面,但是输入账号和密码点击登陆出现异常情况
16:54:14.495 ERROR com.chenxin.authority.web.controller.LoginController - Exception:
org.apache.ibatis.cache.CacheException: java.lang.NoSuchMethodError: net.sf.ehcache.distribution.EventMessage.<init>(ILjava/io/Serializable;Lnet/sf/ehcache/Element;)


使用tomcat7:deploy
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project authority: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "node": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
[ERROR] around Ant part ...<apply parallel="false" dest="${jsp.compress.directory}" executable="node" failonerror="true">... @ 8:97 in C:\Users\hanfeng\Desktop\authority-mysql\target\antrun\build-main.xml
[ERROR] -> [Help 1]


这个你还是用原版的吧,如果maven方面有什么问题,你可以找找资料,第一个应该是的那个ehcache包没有引入或者ehcache包不完整。 第二个就不知道了什么原因了。
36 楼 ihanfeng 2013-06-20  
matychen 写道
ihanfeng 写道
你好,关于http://localhost:8080/authority/这个项目的部署问题,我修改成mysql版本后部署运行起来都不会出现的登陆页面。会提出糟糕!此链接好像已损坏。手动输入action会提示 Request method 'GET' not supported 。我是在删除pom.xml压缩js后才成功部署的。

https://github.com/cxjava/authority
你可以去看看
还有,你看看控制台有什么错误输出没?
如果用maven,你可以用maven的tomcat插件或者jetty插件,启动看看,在控制台有具体的访问的url输出的。
tomcat:run
jetty:run


使用jetty:run 可以显示登陆页面,但是输入账号和密码点击登陆出现异常情况
16:54:14.495 ERROR com.chenxin.authority.web.controller.LoginController - Exception:
org.apache.ibatis.cache.CacheException: java.lang.NoSuchMethodError: net.sf.ehcache.distribution.EventMessage.<init>(ILjava/io/Serializable;Lnet/sf/ehcache/Element;)


使用tomcat7:deploy
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project authority: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "node": CreateProcess error=2, ϵͳÕҲ»µ½ָ¶
[ERROR] around Ant part ...<apply parallel="false" dest="${jsp.compress.directory}" executable="node" failonerror="true">... @ 8:97 in C:\Users\hanfeng\Desktop\authority-mysql\target\antrun\build-main.xml
[ERROR] -> [Help 1]

35 楼 matychen 2013-06-20  
ihanfeng 写道
你好,关于http://localhost:8080/authority/这个项目的部署问题,我修改成mysql版本后部署运行起来都不会出现的登陆页面。会提出糟糕!此链接好像已损坏。手动输入action会提示 Request method 'GET' not supported 。我是在删除pom.xml压缩js后才成功部署的。

https://github.com/cxjava/authority
你可以去看看
还有,你看看控制台有什么错误输出没?
如果用maven,你可以用maven的tomcat插件或者jetty插件,启动看看,在控制台有具体的访问的url输出的。
tomcat:run
jetty:run
34 楼 ihanfeng 2013-06-19  
你好,关于http://localhost:8080/authority/这个项目的部署问题,我修改成mysql版本后部署运行起来都不会出现的登陆页面。会提出糟糕!此链接好像已损坏。手动输入action会提示 Request method 'GET' not supported 。我是在删除pom.xml压缩js后才成功部署的。
33 楼 beauty9235 2013-06-18  
matychen 写道
beauty9235 写道

楼主你好,我己改成mysql版本运行起来了.我觉得用maven管理比较好.这也是工作的一个亮点,但有一些问题,不能理解,像一个大项目,每次改过维护都只有几行代码或一个jsp,我要更新服务器,都得打一个包上去吗?目前我是只更新改过的class和JSP上去.更新时,选停掉应用服务器,FTP传上去后,再打开应用服务器,请教一下你是怎么做的?我还有想解决living update,就是不打断用户的操作,进行更新.请教要怎么做?另外你的这个项目无法在resin中运行.报JS错误.我的所有项目都是resin中跑的,不知你们公司的项目是在什么容器中跑,另外有什么优缺点呢?


  • https://github.com/cxjava/authority mysql、oracle的jpa版本。
  • 我以前是都打包给运维人员的,他们一般是选择用户不多的时候,停掉服务器,在上传,打开服务器。
  • 不打断用户的,属于热部署,这个不是很清楚。
  • resin中报js错误,可能是因为网速原因,导致yepnope加载超时。yepnope默认的超时时间是10秒,这个可以在yepnope的源码中修改,或者在js前面加一个timeout的参数。例如:yepnope('timeout=5000!script.js');这里是毫秒。源码可以去这里下载:https://github.com/SlexAxton/yepnope.js,如需修改参数:在源码的559行:
  •   // Default error timeout to 10sec - modify to alter
      yepnope['errorTimeout'] = 1e4;
    比如30秒 :3e4
  • 我们公司跑的都是内部系统,tomcat足够了,至于优缺点没有深入比较过。

怪不得你用了extjs,如果在互联网,性能可能有些力不从心.作为内部系统,extjs很多功能还是挺好的.谢谢你,我己下载了你的mysql版本.稍后再向你学习.
32 楼 matychen 2013-06-17  
beauty9235 写道

楼主你好,我己改成mysql版本运行起来了.我觉得用maven管理比较好.这也是工作的一个亮点,但有一些问题,不能理解,像一个大项目,每次改过维护都只有几行代码或一个jsp,我要更新服务器,都得打一个包上去吗?目前我是只更新改过的class和JSP上去.更新时,选停掉应用服务器,FTP传上去后,再打开应用服务器,请教一下你是怎么做的?我还有想解决living update,就是不打断用户的操作,进行更新.请教要怎么做?另外你的这个项目无法在resin中运行.报JS错误.我的所有项目都是resin中跑的,不知你们公司的项目是在什么容器中跑,另外有什么优缺点呢?


  • https://github.com/cxjava/authority mysql、oracle的jpa版本。
  • 我以前是都打包给运维人员的,他们一般是选择用户不多的时候,停掉服务器,在上传,打开服务器。
  • 不打断用户的,属于热部署,这个不是很清楚。
  • resin中报js错误,可能是因为网速原因,导致yepnope加载超时。yepnope默认的超时时间是10秒,这个可以在yepnope的源码中修改,或者在js前面加一个timeout的参数。例如:yepnope('timeout=5000!script.js');这里是毫秒。源码可以去这里下载:https://github.com/SlexAxton/yepnope.js,如需修改参数:在源码的559行:
  •   // Default error timeout to 10sec - modify to alter
      yepnope['errorTimeout'] = 1e4;
    比如30秒 :3e4
  • 我们公司跑的都是内部系统,tomcat足够了,至于优缺点没有深入比较过。
31 楼 beauty9235 2013-06-17  
matychen 写道
beauty9235 写道
hi 楼主你好,我用你的代码在本机运行起来,却不能在本地显出来了
WARN  o.s.web.servlet.PageNotFound - Request method 'GET' not supported

我是用的tomcate 7.0
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

<Context  path ="/authority"  docBase ="F:/data/wwwroot/phoenix-reborn/code/reborn/target/authority-1.0.0"  debug ="0"  privileged ="true"/>

      </Host>


输入后
http://localhost:8080/authority/
没有登录的显示,请教一下楼主如何布署的?
在什么应用服务器上做的?

应该是可以的啊。你打一个war包扔进去看看呢

楼主你好,我己改成mysql版本运行起来了.我觉得用maven管理比较好.这也是工作的一个亮点,但有一些问题,不能理解,像一个大项目,每次改过维护都只有几行代码或一个jsp,我要更新服务器,都得打一个包上去吗?目前我是只更新改过的class和JSP上去.更新时,选停掉应用服务器,FTP传上去后,再打开应用服务器,请教一下你是怎么做的?我还有想解决living update,就是不打断用户的操作,进行更新.请教要怎么做?另外你的这个项目无法在resin中运行.报JS错误.我的所有项目都是resin中跑的,不知你们公司的项目是在什么容器中跑,另外有什么优缺点呢?
30 楼 matychen 2013-06-13  
beauty9235 写道
hi 楼主你好,我用你的代码在本机运行起来,却不能在本地显出来了
WARN  o.s.web.servlet.PageNotFound - Request method 'GET' not supported

我是用的tomcate 7.0
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

<Context  path ="/authority"  docBase ="F:/data/wwwroot/phoenix-reborn/code/reborn/target/authority-1.0.0"  debug ="0"  privileged ="true"/>

      </Host>


输入后
http://localhost:8080/authority/
没有登录的显示,请教一下楼主如何布署的?
在什么应用服务器上做的?

应该是可以的啊。你打一个war包扔进去看看呢
29 楼 beauty9235 2013-06-10  
beauty9235 写道
hi 楼主你好,我用你的代码在本机运行起来,却不能在本地显出来了
WARN  o.s.web.servlet.PageNotFound - Request method 'GET' not supported

我是用的tomcate 7.0
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

<Context  path ="/authority"  docBase ="F:/data/wwwroot/phoenix-reborn/code/reborn/target/authority-1.0.0"  debug ="0"  privileged ="true"/>

      </Host>


输入后
http://localhost:8080/authority/
没有登录的显示,请教一下楼主如何布署的?
在什么应用服务器上做的?

相关推荐

Global site tag (gtag.js) - Google Analytics