`
junjun16818
  • 浏览: 105775 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Framework 3.0.5+Spring Security 3.0.5+ mybatis 3.0.5+ Struts 2.2.3整合代码

    博客分类:
  • java
阅读更多

简单的权限控制,密码使用sha加密

 

 

 

 

 

web.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		<!-- default: /WEB-INF/applicationContext.xml -->
	</listener>
	<!-- -->
	
	
	<!-- spring security  -->  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            classpath*:applicationContext*.xml  
        </param-value>  
    </context-param> 
    
    <filter>  
        <filter-name>springSecurityFilterChain</filter-name>  
        <filter-class>  
            org.springframework.web.filter.DelegatingFilterProxy  
        </filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>springSecurityFilterChain</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    <listener>  
        <listener-class>  
            org.springframework.web.context.ContextLoaderListener  
        </listener-class>  
    </listener>  
	
	
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf8</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- 
	<filter>
		<filter-name>openSessionInView</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>openSessionInView</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	 -->
	<filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

 

applicationContext.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
   			http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   			http://www.springframework.org/schema/context 
   			http://www.springframework.org/schema/context/spring-context-2.5.xsd
   			http://www.springframework.org/schema/jee 
   			http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
   			http://www.springframework.org/schema/tx 
   			http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

	<bean
		class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />

	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>classpath:jdbc.properties</value>
		</property>
	</bean>
	
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url"
			value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<!--
		配置事务管理器,注意这里的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事务就没有作用了
	-->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<tx:annotation-driven transaction-manager="transactionManager" />
	<!-- myBatis文件 -->

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis.xml" />
		<property name="mapperLocations" value="classpath*:com/glen/model/*.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>
<!-- 
	<bean id="accountDao" class="com.glen.dao.AccountDao">
		<property name="sessionFactory" ref="sqlSessionFactory" />
	</bean>

	<bean id="accountService" class="com.glen.service.AccountService">
		<property name="accountDao" ref="accountDao" />
	</bean>
 -->
	<context:annotation-config />
	<context:component-scan base-package="com.glen" />


</beans>

 

 

applicationContext-security.xml

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/security  
    http://www.springframework.org/schema/security/spring-security-3.0.xsd">

	<!--
		auto-config = true 则使用from-login. 如果不使用该属性 则默认为http-basic(没有session).
		access-denied-page:出错后跳转到的错误页面;
	-->
	<http auto-config="true" access-denied-page="/common/403.jsp">
		<!--
			intercept-url:拦截器,可以设定哪些路径需要哪些权限来访问. filters=none 不使用过滤,也可以理解为忽略
		-->
		<intercept-url pattern="/index.jsp" access="ROLE_USER,ROLE_ADMIN" />
		<intercept-url pattern="/login.jsp" filters="none" />
		<intercept-url pattern="/common/**" filters="none" />
		<intercept-url pattern="/script/**" filters="none" />
		<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
		<intercept-url pattern="/user.jsp" access="ROLE_USER" />

		<!-- session-management是针对session的管理. 这里可以不配置. 如有需求可以配置. -->
		<!--
			id登陆唯一. 后登陆的账号会挤掉第一次登陆的账号 error-if-maximum-exceeded="true" 禁止2次登陆;
			session-fixation-protection="none" 防止伪造sessionid攻击.
			用户登录成功后会销毁用户当前的session. 创建新的session,并把用户信息复制到新session中.
		-->
		<session-management session-fixation-protection="none">
			<concurrency-control />
		</session-management>

		<!--
			login-page:默认指定的登录页面. authentication-failure-url:出错后跳转页面.
			default-target-url:成功登陆后跳转页面
		-->
		<form-login login-page="/login.jsp"
			authentication-failure-url="/login.jsp" default-target-url="/index.jsp" />
		<!-- logout-success-url:成功注销后跳转到的页面; -->
		<logout logout-success-url="/login.jsp" />
		<http-basic />

	</http>




	<!-- 权限管理操作 -->
	<authentication-manager>
		<authentication-provider>
			
			<!-- 使用固定的用户名和密码及权限来做验证.    -->
			<!--
				<user-service> <user name="admin" password="admin"
				authorities="ROLE_USER, ROLE_ADMIN" /> <user name="user"
				password="user" authorities="ROLE_USER" /> </user-service>
			-->

			
			<jdbc-user-service data-source-ref="dataSource"
				users-by-username-query="select username,password,enabled
                                        from account
                                        where username=?"
				authorities-by-username-query="select username,authority
                                        from authorities
                                        where username=?" />
			<password-encoder hash="sha"/>

		</authentication-provider>
	</authentication-manager>
	<!--
		<beans:bean id="userDetailsServiceImpl"
		class="com.demo.test.service.impl.UserDetailsServiceImpl" />
	-->



</beans:beans>  

 

 

mybatis.xml 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>




</configuration>

 

struts.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.i18n.encoding" value="UTF-8" />

	<package name="User" extends="json-default">  
       		<action name="user" class="com.glen.action.AccountAction">  
           		<result type="json" />   
        	</action> 
    	</package> 
</struts>

 

account-mapper.xml

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="account">

 <!-- 
 <select id="getList" parameterType="com.glen.model.Account" resultType="list" resultMap="accountMap.accountResultMap">
   select * from account where username like '%' #{username} '%'
 </select>
  -->
 <select id="getAllAccount" resultType="list" resultMap="accountMap.accountResultMap">
   select * from account
 </select>
  
 
 <!-- accountResultMap是account-resultmap.xml中定义的resultmap -->
 <select id="get" parameterType="com.glen.model.Account" resultType="com.glen.model.Account" resultMap="accountMap.accountResultMap">
  <![CDATA[
   select * from account where id = #{id}
        ]]>
 </select>
 
 
 <!-- 自动生成id策略 -->
 <insert id="add" useGeneratedKeys="true" keyProperty="id" parameterType="com.glen.model.Account">
  insert into account(id, username, password)
  values(#{id,jdbcType=BIGINT}, #{username}, sha(#{password}))
<!--将最后插入的逐渐返回到java对象-->
  <selectKey resultType="int" keyProperty="id">
   SELECT LAST_INSERT_ID()
  </selectKey>
  
 </insert>
  
 <update id="edit" parameterType="com.glen.model.Account">
  update account set
  username = #{username},
  password = #{password}
  where id = #{id}
 </update>
 
 <delete id="remove" parameterType="com.glen.model.Account">
  delete from account where id = #{id}
 </delete>
  
</mapper> 

 

account-resultMap.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="accountMap">

    <resultMap type="com.glen.model.Account" id="accountResultMap">

       <id property="id" column="id"/>

       <result property="username" column="username"/>

       <result property="password" column="password"/>
       
		<result property="enabled" column="enabled"/>

    </resultMap>

</mapper>

 Account.java

 

package com.glen.model;

import java.io.Serializable;

public class Account implements Serializable {

	private static final long serialVersionUID = -7970848646314840509L;

	private Integer id;
	private String username;
	private String password;
	private int enabled;
	public Account() {
		super();
	}


	public Integer getId() {
		return id;
	}


	public void setId(Integer id) {
		this.id = id;
	}



	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}


	public int getEnabled() {
		return enabled;
	}


	public void setEnabled(int enabled) {
		this.enabled = enabled;
	}

	
	

}

 AccountDao.java

 

package com.glen.dao;

import java.util.List;

import javax.annotation.Resource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Repository;

import com.glen.model.Account;
@Repository
public class AccountDao {
	
	@Resource
	private SqlSessionFactory sessionFactory;

	public SqlSessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SqlSessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public int insert(Account account) {

		SqlSession session = sessionFactory.openSession();
		return session.insert("account.add", account);
	}
	public void remove(Account account) {

		SqlSession session = sessionFactory.openSession();
		 session.delete("account.remove", account);
	}
	public Account getAccountById(Account account) {

		SqlSession session = sessionFactory.openSession();
		Account accountFromDb = (Account) session.selectOne("account.get",
				account);
		return accountFromDb;
	}
	@SuppressWarnings("unchecked")
	public List<Account> getAllAccount(){
		SqlSession session = sessionFactory.openSession();
		List<Account> accountFromDb = (List<Account>) session.selectList("account.getAllAccount");
		return accountFromDb;
		
	}

}

 

AccountService.java

 

package com.glen.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.glen.dao.AccountDao;
import com.glen.model.Account;
@Repository
public class AccountService {
	@Resource
	private AccountDao  accountDao;

	
	
	public int insertAccount(Account account) {
	  
		return accountDao.insert(account);
		
	}
	 
	public int remove(String removeNumbers) {
		String arrs[] = removeNumbers.split("\\|");
		for (String string : arrs) {
			System.out.println(string);
			Account account = new Account();
			account.setId(Integer.parseInt(string));
			accountDao.remove(account);
		}
		 
		 return arrs.length;
		 
	}
	 
	
	public Account getAccountById(Account account) {
	  
		return accountDao.getAccountById(account);
	}
	public List<Account> getAllAccount() {
		  
		return accountDao.getAllAccount();
	}
	public AccountDao getAccountDao() {
		return accountDao;
	}

	public void setAccountDao(AccountDao accountDao) {
		this.accountDao = accountDao;
	}
	
}

 

AccountAction.java

 

package com.glen.action;

import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Component;

import com.glen.model.Account;
import com.glen.service.AccountService;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
@Component
public class AccountAction extends ActionSupport{
	
	@Resource
	private AccountService accountService;
	private List<Account> list;
	
	private HttpServletResponse response ;
	private String removeNumbers;
	private Account account;
	private String level;
	@Override
	public String execute() throws Exception  {
		// TODO Auto-generated method stub
		response = ServletActionContext.getResponse();
		
		list = accountService.getAllAccount();
	
		String jsonStr="";
		for (Account account2 : list) {
			
				JSONObject jo = JSONObject.fromObject(account2);
				jsonStr+=","+ jo.toString();  
			
		}
		jsonStr = jsonStr.substring(1,jsonStr.length());
		try {  
            // 返回成功标识  
            response.getWriter().println(jsonStr);  
            response.getWriter().flush();  
            System.out.println("haha");
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                response.getWriter().close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
  
        return null;  
		
	}
	
	
	
	public String addUser() throws Exception{
		
		response = ServletActionContext.getResponse();
		account.setEnabled(1);
		accountService.insertAccount(account);
		
		try {  
            // 返回成功标识  
            response.getWriter().println("{success:true,userID:"+account.getId()+"}");  
            response.getWriter().flush();  
            System.out.println("haha");
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                response.getWriter().close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
		
		return null;
		
	}
	
	
	public String removes(){
		System.out.println(removeNumbers);
		response = ServletActionContext.getResponse();
		
		int count = accountService.remove(removeNumbers);
	
		try {  
            // 返回成功标识  
            response.getWriter().println(count);  
            response.getWriter().flush();  
            System.out.println("haha");
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                response.getWriter().close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
		
		return null;
	}
	
	
	public HttpServletResponse getResponse() {
		return response;
	}

	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}

	public AccountService getAccountService() {
		return accountService;
	}
	public void setAccountService(AccountService accountService) {
		this.accountService = accountService;
	}

	public List<Account> getList() {
		return list;
	}

	public void setList(List<Account> list) {
		this.list = list;
	}

	public Account getAccount() {
		return account;
	}

	public void setAccount(Account account) {
		this.account = account;
	}

	public String getRemoveNumbers() {
		return removeNumbers;
	}

	public void setRemoveNumbers(String removeNumbers) {
		this.removeNumbers = removeNumbers;
	}

	public String getLevel() {
		return level;
	}

	public void setLevel(String level) {
		this.level = level;
	}

}

 login.js

 

/**
 * @author joo
 */

Ext.require( [ 'Ext.form.*', 'Ext.window.*' ])

Ext.onReady(function() {

	var form = Ext.create('Ext.form.Panel', {
		border : false,
		url : 'j_spring_security_check',
		method : 'post',
		fieldDefaults : {
			labelWidth : 50
		},
		bodyPadding : '30 60 10 60',
		items : [ {
			id:'loginUsername',
			xtype : 'textfield',
			fieldLabel : '用户名',
			name : 'j_username',
			anchor : '100%',
			shadow : true
		}, {
			xtype : 'textfield',
			id:'loginPassword',
			fieldLabel : '密码',
			name : 'j_password',
			anchor : '100%',
			padding : '20 0 0 0'

		} ]

	})

	var win = Ext.create('Ext.window.Window', {
		title : 'Resize Me',
		width : 400,
		height : 200,
		layout : 'fit',
		x:500,
		y:200,
		plain : true,
		items : form,
		buttons : [ {
			text : '登陸',
			handler : function() {
				var username = Ext.getCmp('loginUsername').value;
				var password = Ext.getCmp('loginPassword').value;
				$('#bestLoginUsername').val(username);
				$('#bestLoginPassword').val(password);
				$('#submitForm').submit();
		}
		}, {
			text : '取消'
		} ]
	});

	win.show();
});

 login.jsp

 

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Login' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	 -->
	 <link rel="stylesheet" type="text/css" href="ext-4.0/resources/css/ext-all.css" />
    	<link rel="stylesheet" type="text/css" href="ext-4.0/examples/shared/example.css" />
    	<script type="text/javascript" src="ext-4.0/bootstrap.js"></script>
    	
  <script type="text/javascript" src="jquery-1.4.1.js"></script>
		<script type="text/javascript" src="login.js" charset="utf-8"></script>
		
  </head>
  
  <body>
  <div align="center" style="padding-top: 200px;padding-left:100px">
	<form id="submitForm" action="<%=path %>/j_spring_security_check" method="post">  
        USERNAME:<input type="text" name="j_username" id="bestLoginUsername" value="" /><br/>  
        PASSWORD:<input type="password" name="j_password" id="bestLoginPassword" value="" /><br/>   
    </form> 
    </div> 
  </body>
</html>
 

 

user.js

 

/**
 * @author joo
 */
Ext.require([
	'Ext.dd.*',
	'Ext.data.*',
	'Ext.grid.*',
	'Ext.ModelManager.*'

])

Ext.define('DataObject',{
	extend:'Ext.data.Model',
	fields:['id','username','password']
});
function strToJson(str){   
    var json = eval('(' + str + ')');   
    return json;   
}  
var auth ;

function getGrid(firstGridStore){
	var Levelstates = Ext.create('Ext.data.Store', {
        fields: ['level', 'value'],
        data: [{
            "level": "ROLE_USER",
            "value": "ROLE_USER"
        }, {
            "level": "ROLE_ADMIN",
            "value": "ROLE_ADMIN"
        } // ...
]
    });
	var columns = [
		       		{text:'用户名',flex:1,sortable:true,dataIndex:'username'},
		       		{text:'密码',winth:70,sortable:true,dataIndex:'password'}
		       	]
		       	
		       	firstGrid = Ext.create('Ext.grid.Panel',{
		       		
		       		multiSelect:true,
		       		viewConfig:{
		       			plugins:{
		       				ptype:'gridviewdragdrop',
		       				dragGroup:'firstGridDDGroup',
		       				dropGroup:'secondGridDDGroup'
		       			},
		       			listeners: {
		                       drop: function(node, data, dropRec, dropPosition) {
		       					
		                           var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
		                           Ext.example.msg("Drag from right to left", 'Dropped ' + data.records[0].get('name') + dropOn);
		                           
		                       }
		                   }
		       			
		       		},
		       		store:firstGridStore,
		       		columns:columns,
		       		title:'用户列表',
		       		stripeRows:true,
		       		margins:'0 4 0 0'
		       	})
		       	
		       	
		       	var secondGridStore = Ext.create('Ext.data.Store',{
		       		model:DataObject
		       	})
		       	
		       	secondGrid = Ext.create('Ext.grid.Panel',{
		       		
		       		viewConfig:{
		       			plugins:{
		       				ptype:'gridviewdragdrop',
		       				dragGroup:'secondGridDDGroup',
		       				dropGroup:'firstGridDDGroup'
		       			},
		       			listeners: {
		                       drop: function(node, data, dropRec, dropPosition) {
		                           var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';
		                           Ext.example.msg("Drag from left to right", 'Dropped ' + data.records[0].get('name') + dropOn);
		                       }
		                   }
		       		},
		       		store:secondGridStore,
		       		stripeRows:true,
		       		columns:columns,
		       		title:'删除列表'
		       		
		       	})
		       	
		       	
		       	
		       	var displayPanel = Ext.create('Ext.Panel',{
		       		
		       		width:650,
		       		height:300,
		       		layout:{
		       			type:'hbox',
		       			align:'stretch',
		       			padding:5
		       		},
		       		defaults:{flex:1},
		       		items:[firstGrid,secondGrid],
		       		renderTo:'panel',
		       		dockedItems:{
		       			xtype:'toolbar',
		       			dock:'bottom',
		       			items:[{
		       				text:'添加',
		       				handler:function(){
		       					if(auth=='[ROLE_ADMIN]')
		       						win.show();
		       					if(auth=='[ROLE_USER]')
		       						Ext.Msg.alert('用户','您没有权限')
		       					
		       				}
		       			},'->',{
		       				text:'删除',
		       				handler:function(){
		       				
	       					if(auth=='[ROLE_USER]'){
	       						Ext.Msg.alert('用户','您没有权限')
	       						return;
	       					}
	       						
		       					var store = (secondGrid.getStore());
		       					if(store.getCount()<=0){
		       						Ext.Msg.alert('消息', '请拖动数据到删除列表..');  
		       						return
		       					}
		       					var val = "";
		       					for(var i=0;i<store.getCount();i++){
		       						val += "|"+(store.getAt(i).get('id'))
		       					}
		       					val=val.substring(1, val.length);
		       					Ext.Ajax.request({

		       					   url: 'user!removes.action',

		       					   success:function(response,opts){
		       							
		       						Ext.Msg.alert('消息', '删除成功:共删除了'+response.responseText+'条内容');
		       							secondGridStore.removeAll()
		       						},

		       					   failure:function(response,opts){
		       							
		       							Ext.Msg.alert('消息', '删除失败');
		       						},
		       						
		       					   params:{removeNumbers:val}

		       					});
		       					//;
		       				}
		       			}]
		       		}
		       		
		       	})
		       	
		       	
		       	
		       	var addUserForm = Ext.create('Ext.form.Panel',{
		       		border:false,
		       		fieldDefaults:{
		       			labelWidth:50
		       		},
		       		bodyPadding:'30 60 10 60',
		       		items:[{
		       				xtype:'textfield',
		       				fieldLabel:'姓名',
		       				name:'account.username',
		       				anchor:'100%', 
		       				shadow :true,
		       				id:'username',
		       			},{
		       				xtype:'textfield',
		       				fieldLabel:'密碼',
		       				name:'account.password',
		       				anchor:'100%' ,
		       				padding:'20 0 0 0',
		       				id:'password'
		       			}
		       			]

		       	})
		       	
		       	var win = Ext.create('Ext.window.Window', {
		               title: 'Resize Me',
		               width: 400,
		               height:300,
		               layout: 'fit',
		               plain: true,
		       		items:addUserForm,
		               buttons: [{
		                   text: '添加',
		       			handler:function(){
		       				var store = firstGrid.getStore();
		       				//var loginForm = Ext.getCmp('login-form').form;   
		       				addUserForm.form.doAction('submit', {    
		       	                    url:'user!addUser.action',    
		       	                    method:'POST',                          
		       	                    waitMsg:'正在添加...',    
		       	                    timeout:10000,//10秒超时,    
		       	                    //params:loginForm.getValues(),  
		       	                    success:function(form, action){    
		       	            			//alert(action.result.userID); 
		       	            			var user = Ext.ModelManager.create({
		    		          			username : Ext.getCmp('username').value,
		    		          			password  : Ext.getCmp('password').value,
		    		          			id  : action.result.userID,
		    		       				}, 'DataObject');
		    		       				store.insert(store.getCount(),user);
		       	                    },    
		       	                    failure:function(form, action){    
		       	                        alert('添加失败');    
		       	                    }    
		       	                });    
		       				
		       				
		       				
		       				
		       				win.hide();
		       			}
		               },{
		                   text: '取消',
		       			handler:function(){
		       				win.hide()
		       			}
		               }]
		           });
	
}

Ext.onReady(function(){

	//您的权限为
	auth = $('#authHidden').val();
	if(auth=='[ROLE_ADMIN]')
		Ext.Msg.alert('管理员','您的权限为管理员')
	if(auth=='[ROLE_USER]')
		Ext.Msg.alert('用户','您的权限为普通用户')
	Ext.Ajax.request({

		   url: 'user.action',

		   success:function(response,opts){
				var data =  ('['+response.responseText+']');
				var onepiece=strToJson(data);
				var firstGridStore = Ext.create('Ext.data.JsonStore',{
					model:DataObject,
					data:onepiece
				})
				getGrid(firstGridStore)
			},

		   failure:function(response,opts){
				
				Ext.Msg.alert('消息', '错误');
			},
			
		   params:{page:1}

		});

	
});

 index.jsp

 

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
    	
		<link rel="stylesheet" type="text/css" href="ext-4.0/resources/css/ext-all.css" />
    	<link rel="stylesheet" type="text/css" href="ext-4.0/examples/shared/example.css" />
    	<script type="text/javascript" src="ext-4.0/bootstrap.js"></script>
		<script type="text/javascript" src="ext-4.0/examples/shared/examples.js"></script>
		<script type="text/javascript" src="user.js" charset="utf-8"></script>

	<script type="text/javascript" src="jquery-1.4.1.js"></script>
	
	<SCRIPT type="text/javascript">
	
	
	
	</SCRIPT>
	
  <body>
  <INPUT type="hidden" id="authHidden" value ="<sec:authentication property="principal.authorities"/>"/>
		<div align="center" style="padding-top:120px;" id="panel"></div>
  </body>
</html>
分享到:
评论
5 楼 u011227256 2015-03-12  
                                
4 楼 rochou 2013-12-18  
为什么login.jsp里面的form表单没有submit动作 难道是写到js里面了? 望速回啊
3 楼 junjun16818 2013-05-27  
yuncpu 写道
openSessionInView
这里用的是hibernate的延迟加载方式
哪来到hibernate
不是mybatis吗?

从别的项目copy过来的,这不是注释掉了么,
2 楼 yuncpu 2013-05-20  
openSessionInView
这里用的是hibernate的延迟加载方式
哪来到hibernate
不是mybatis吗?
1 楼 funnyone 2012-01-19  
       

相关推荐

    友价免签约支付接口插件最新版

    友价免签约支付接口插件最新版

    基于java的微信小程序跳蚤市场设计与实现答辩PPT.pptx

    基于java的微信小程序跳蚤市场设计与实现答辩PPT.pptx

    java程序员面试求职指南

    程序员面试求职指南 程序员简历制作指南 面试常见词汇扫盲 项目经验指南

    akima-2019.1.1-cp34-cp34m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    aiohttp-3.8.1-cp311-cp311-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    JSP基于SSM旅游景点预订html5网站毕业源码案例设计.zip

    JSP基于SSM旅游景点预订html5网站毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    open3d-0.15.2-cp38-cp38-win-amd64.whl

    open3d-0.15.2-cp38-cp38-win_amd64.whl open3d cuda的python包 import open3d as o3d print(o3d.cuda.Device().is_cuda_available() )# 检查是否支持CUDA

    【python毕业设计】基于Python的可视化学习系统(完整前后端源码).zip

    环境说明: 开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 5.7+ 数据库工具:Navicat11 开发软件:PyCharm

    aicspylibczi-2.7.6-cp36-cp36m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    宠物综合服务平台 SSM毕业设计 附带论文.zip

    宠物综合服务平台 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    使用Java实现一个游戏引擎.zip

    本资源提供了一个使用Java语言实现的完整游戏引擎示例,旨在帮助开发者学习和理解游戏引擎的基本架构和核心功能。该资源包含了从图形渲染、物理模拟到用户输入处理等多个模块的实现代码,以及相关的文档和注释,便于开发者进行学习和研究。通过本资源,你可以深入了解如何利用Java语言构建一个可扩展的游戏引擎框架,包括场景管理、实体组件系统(ECS)的设计,以及如何集成第三方库来增强游戏引擎的功能。此外,资源中还提供了一些简单的游戏示例,帮助你快速上手并实践所学知识。请注意,本资源是一个学习资源,适合有一定编程基础并对游戏开发感兴趣的开发者使用。通过研究和分析这些代码,你将能够更好地掌握游戏引擎的开发技巧,为未来的项目打下坚实的基础。

    astropy-4.0.3-cp36-cp36m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    青大校园预点餐系统 SSM毕业设计 附带论文.zip

    青大校园预点餐系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    arctic-1.67.1-cp37-cp37m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    aggdraw-1.3.11-cp27-cp27m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    基于java的微信小程序健身房私教预约系统答辩PPT.pptx

    基于java的微信小程序健身房私教预约系统答辩PPT.pptx

    原版astropy-5.3.3-cp311-cp311-win_arm64.whl-下载即用直接pip安装.zip

    安装前的准备 1、安装Python:确保你的计算机上已经安装了Python。你可以在命令行中输入python --version或python3 --version来检查是否已安装以及安装的版本。 个人建议:在anaconda中自建不同python版本的环境,方法如下(其他版本照葫芦画瓢): 比如创建python3.8环境,anaconda命令终端输入:conda create -n py38 python==3.8 2、安装pip:pip是Python的包管理工具,用于安装和管理Python包。你可以通过输入pip --version或pip3 --version来检查pip是否已安装。 安装WHL安装包 1、打开命令行(或打开anaconda命令行终端): 在Windows上,你可以搜索“cmd”或“命令提示符”并打开它。 在macOS或Linux上,你可以打开“终端”。 2、cd到whl文件所在目录安装: 使用cd命令导航到你下载的whl文件所在的文件夹。 终端输入:pip install xxx.whl安装即可(xxx.whl指的是csdn下载解压出来的whl) 3、等待安装完成: 命令行会显示安装进度,并在安装完成后返回提示符。 以上是简单安装介绍,小白也能会,简单好用,从此再也不怕下载安装超时问题。 使用过程遇到问题可以私信,我可以帮你解决! 收起

    VB程序实例-将Access表中数据按一定格式存储到Txt文件.zip

    基于VB的程序实例,可供参考学习使用

    基于 java gui编程实现的贪吃蛇小游戏.zip

    本资源为“基于Java GUI编程实现的贪吃蛇小游戏”,是一款经典的编程入门游戏,适合初学者通过实践掌握Java编程语言、图形用户界面设计以及游戏逻辑实现。项目利用Java Swing库构建用户界面,涵盖了游戏窗口、得分显示、键盘输入等关键元素。学习者将了解如何使用Swing组件创建游戏界面,处理键盘事件控制贪吃蛇移动,并通过定时器实现动画与刷新机制。此外,还需掌握数据结构(如队列)存储贪吃蛇身体,以及算法实现贪吃蛇移动和食物生成逻辑。本项目不仅巩固了Java编程基础,还锻炼了面向对象思维和问题解决能力,是练手学习和课程设计的绝佳选择。

    升官图游戏 java.zip

    升官图游戏 java.zip

Global site tag (gtag.js) - Google Analytics