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

jopen 12年前發布 | 223K 次閱讀 ExtJS Spring MVC Web框架 Spring3 MVC MyBatis

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></pre>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans&quot; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:mvc="http://www.springframework.org/schema/mvc&quot;
    xmlns:context="http://www.springframework.org/schema/context&quot; xmlns:tx="http://www.springframework.org/schema/tx&quot; xmlns:aop="http://www.springframework.org/schema/aop&quot;
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd&quot; default-lazy-init="true">

<!-- 只搜索@Controller 標注的類 不搜索其他標注的類 -->
<context:component-scan base-package="com.chenxin.authority" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

<!-- controller層的屬性和配置文件讀入 ,多個用逗號隔開 <context:property-placeholder location="classpath:/config/others/config.properties" /> -->

<!-- 應用屬性文件讀入 -->
<bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <!-- 標準配置 -->
            <value>classpath:/config/others/config.properties</value>
            <value>classpath:/config/ibatis/jdbc.properties</value>
        </list>
    </property>
</bean>

<!-- 用于持有applicationProperties,將properties轉變為靜態方法使用,PropertiesHolder.getProperty("somekey") -->
<bean class="com.chenxin.authority.common.utils.PropertiesHolder">
    <property name="properties" ref="applicationProperties" />
</bean>

<!-- PropertyPlaceholderConfigurer,用于spring ${placeholder}的解析 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="properties" ref="applicationProperties" />
</bean>

<!-- 激活 @Required @Autowired,JSR 250's @PostConstruct, @PreDestroy and @Resource 等標注 -->
<context:annotation-config />


<!-- 對某些靜態資源,如css,圖片等進行過濾 ,有引用 "/resources/**" 的路徑引用轉到工程的/resources/目錄取資源 -->
<!-- <mvc:resources mapping="/favicon.ico" location="/favicon.ico"/> -->
<mvc:resources mapping="/resources/**" location="/resources/" />

<!-- 簡單的地址映射 -->
<!-- Forwards requests to the "/" resource to the "welcome" view 
 <mvc:view-controller path="/admin" view-name="/admin/login" /> 
-->

<mvc:annotation-driven />
<!-- Configures support for @Controllers <mvc:annotation-driven/>相當于注冊了DefaultAnnotationHandlerMapping
和AnnotationMethodHandlerAdapter兩個bean,配置一些messageconverter。即解決了@Controller注解的使用前提配置。
如果不用這個,則要聲明下面2個bean
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json"/>
            </bean>
        </list>
    </property>
</bean>
 -->
    <!--
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
     攔截器注冊 -->
    <!-- <property name="interceptors">
        <bean class="com.company.project.common.springmvc.interceptor.SharedRenderVariableInterceptor"/>
    </property> 
</bean>
    -->


<!-- jsp視圖 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

<!-- 針對類、方法級別的權限攔截器 -->
<mvc:interceptors>
    <mvc:interceptor>
        <!-- <mvc:mapping path="/fileupload" /> -->
        <mvc:mapping path="/main*" />
        <mvc:mapping path="/header*" />
        <mvc:mapping path="/welcome*" />
        <mvc:mapping path="/treeMenu*" />
        <mvc:mapping path="/role**/**" />
        <mvc:mapping path="/user**/**" />
        <mvc:mapping path="/module**/**" />
        <mvc:mapping path="/field**/**" />
        <bean class="com.chenxin.authority.web.interseptor.LoginInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

<!--開發期間注釋掉,上線后啟用 錯誤解析器 發生錯誤默認會跳轉到/web-inf/views/timeout.jsp -->
<!-- <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="defaultErrorView" 
    value="timeout" /> <property name="exceptionMappings"> <props> <prop key="java.sql.SQLException">timeout</prop> <prop key="java.lang.RuntimeException">timeout</prop> 
    <prop key="org.springframework.transaction.TransactionException">timeout</prop> <prop key="org.springframework.dao.DataAccessException">timeout</prop> 
    </props> </property> </bean> -->

<!-- 國際化,并且可以批定文件編碼,可以使用classpath: 或者WEB-INF/ 前綴 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>classpath:/config/others/messages</value>
            <value>classpath:ValidationMessages</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8" />
    <property name="cacheSeconds" value="60" />
</bean>

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

<!-- 文件上傳 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 解析request的編碼 ,Default is ISO-8859-1 -->
    <property name="defaultEncoding" value="UTF-8" />
    <!-- 設置最大允許的大小(字節)。-1表示沒有限制(默認) 1024*1024*10=10MB -->
    <property name="maxUploadSize" value="1048576000" />
    <!--被允許的最大的內存的大小,Default is 10240 bytes -->
    <property name="maxInMemorySize" value="20480" />
    <!-- 一個類似懶加載的屬性.可以定義該屬性.讓解析文件的時候再拋異常,然后Controller中定義異常處理的方法 -->
    <property name="resolveLazily" value="true" />
</bean>

</beans></pre>代碼不多貼了,上圖片吧。








  authority.rar

轉自: http://www.iteye.com/topic/1119744

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!