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>
代码不多贴了,上图片吧。
5 楼
matychen
2012-01-12
SDMRauquin 写道
虽然连上了,发现很多sql都是依赖oracle的,稍微修改了些适合mysql的就不想改了。
感觉mybatis数据库移植不如hibernate
感觉mybatis数据库移植不如hibernate
还是那句话,一个系统选型好了,有那么多的情况要移植数据库么?除非迫不得已。
6 楼
c4tc4tc4tc
2012-02-04
感谢楼主把自己的程序和大家分享。我这样的菜鸟可以学到很多知识
7 楼
honlin
2012-02-07
在本地部署了一下,确实不错,不过admin的登陆密码是多少呢?
8 楼
daifeng130
2012-02-23
谢谢分享,spring3mvc+extjs+ibatis正是我现在想学的,要是加上工作流就完美了。
楼主的邮箱是否暴露了所在公司?
楼主的邮箱是否暴露了所在公司?
9 楼
jasonjun2005
2012-03-15
验证码几乎看不清呀!
10 楼
jasonjun2005
2012-03-15
admin的密码是多少。
怎么解密?
怎么解密?
11 楼
matychen
2012-03-15
jasonjun2005 写道
admin的密码是多少。
怎么解密?
怎么解密?
1啊
12 楼
5415
2012-03-27
你好 怎么有几个jar 文件无法下载
13 楼
5415
2012-03-27
程序无法跑起来 很郁闷
14 楼
ayanami001
2012-03-28
好东西 ~
15 楼
hwx521
2012-05-15
maven提示好几个jar无法下载,请教如何能运行项目
16 楼
honlin
2012-05-16
第三方jar包需要手工添加,命令如下:
mvn install:install-file -Dfile=E:/maven221/repository/com/oracle/ojdbc14/10.2.0.2.0/ojdbc14-10.2.0.2.0.jar -DgroupId=com.org.common.oracle -DartifactId=oracle -Dversion=10.2.0.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/proxool-0.9.1.jar -DgroupId=proxool -DartifactId=proxool -Dversion=0.9.1 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/proxool-cglib.jar -DgroupId=proxool -DartifactId=proxool-cglib -Dversion=0.9.1 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/ojdbc14-10.2.0.2.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/kaptcha-2.3.2.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.3 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=E:/maven221/repository/com/oracle/ojdbc14/10.2.0.2.0/ojdbc14-10.2.0.2.0.jar -DgroupId=com.org.common.oracle -DartifactId=oracle -Dversion=10.2.0.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/proxool-0.9.1.jar -DgroupId=proxool -DartifactId=proxool -Dversion=0.9.1 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/proxool-cglib.jar -DgroupId=proxool -DartifactId=proxool-cglib -Dversion=0.9.1 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/ojdbc14-10.2.0.2.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.2.0 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=C:/JAVA/lib/kaptcha-2.3.2.jar -DgroupId=com.google.code -DartifactId=kaptcha -Dversion=2.3.3 -Dpackaging=jar -DgeneratePom=true
17 楼
hwx521
2012-05-16
唉 就是不懂了,用个maven把项目弄的这么麻烦,为啥还要用。把网盘中的lib包也下载了然后视图转成普通的jee项目还是无法运行,真是够郁闷的。楼主能否发个普通版版本的jee项目包啊。
18 楼
matychen
2012-05-17
hwx521 写道
唉 就是不懂了,用个maven把项目弄的这么麻烦,为啥还要用。把网盘中的lib包也下载了然后视图转成普通的jee项目还是无法运行,真是够郁闷的。楼主能否发个普通版版本的jee项目包啊。
怎么个无法运行?
19 楼
D_Ace_
2012-05-17
楼主你好,能提供下源码吗,十分感谢!学习用途
289556866@qq.com
289556866@qq.com
20 楼
matychen
2012-05-17
D_Ace_ 写道
楼主你好,能提供下源码吗,十分感谢!学习用途
289556866@qq.com
289556866@qq.com
附件里就有源码了,不要看见包很小,就以为不是源码。
21 楼
D_Ace_
2012-05-18
matychen 写道
D_Ace_ 写道
楼主你好,能提供下源码吗,十分感谢!学习用途
289556866@qq.com
289556866@qq.com
附件里就有源码了,不要看见包很小,就以为不是源码。
嗯嗯,谢谢,能加下你QQ吗,想向你学习下。本人刚出来混的大学生,很多东西不懂。
22 楼
D_Ace_
2012-05-22
楼主,你的项目我已经成功跑起来了,但是我发现一个问题,你的log是用logback的
logback我发现无法在junit上面输出啊,运行Test方法的时候,抛出下面的异常:
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug
楼主,你的Test是怎么跑通的。。。可以请教下吗
logback我发现无法在junit上面输出啊,运行Test方法的时候,抛出下面的异常:
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug
楼主,你的Test是怎么跑通的。。。可以请教下吗
23 楼
matychen
2012-05-22
D_Ace_ 写道
楼主,你的项目我已经成功跑起来了,但是我发现一个问题,你的log是用logback的
logback我发现无法在junit上面输出啊,运行Test方法的时候,抛出下面的异常:
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug
楼主,你的Test是怎么跑通的。。。可以请教下吗
logback我发现无法在junit上面输出啊,运行Test方法的时候,抛出下面的异常:
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug
楼主,你的Test是怎么跑通的。。。可以请教下吗
自己找下撒,这个估计是包版本不匹配的问题吧。
24 楼
lyx_2709
2012-09-02
我晕晕了,首地址是啥啊,是http://localhost:8080/authority-1.0.0吗