您的位置:首页 > 编程语言 > Java开发

Struts2+Ibatis+Spring.30(完整例子,含3.0事务配置,OSCache缓存配置,JreeChart配置,log4j日志输出Sql,对一个表实现完整的查询,批量删除,添加,更新)

2012-04-13 16:45 1506 查看
1.新建表

create table

(

id int identity(1,1) primary key,

loginid varchar(10),

username varchar(20),

loginpassword varchar(20),

roleid varchar(10)

)

2.新建WEB项目,导入jar包,如下:



3.WEB-INF下,建立5个配置文件,结构如下



web.xml,

struts2-service.xml(配置Service类使用,可再拆分成多个配置文件)

struts2-action.xml(配置Action类使用,可再拆分成多个配置文件)

SqlMapConfig.xml(Ibatis映射文件)

applicationContext.xml,(数据源配置,事务配置,DAO配置)

内容如下:

web.xml完整内容:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<!-- struts2配置 -->

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- JfreeChart配置 -->

<servlet>

<servlet-name>display</servlet-name>

<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>display</servlet-name>

<url-pattern>/servlet/displaychart</url-pattern>

</servlet-mapping>

<!-- 指定Session过期后,自动删除tomcat目录下的temp文件夹内的图片 -->

<listener>

<listener-class>org.jfree.chart.servlet.ChartDeleter</listener-class>

</listener>

<!-- Spring配置 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml

,/WEB-INF/struts2-action.xml

,/WEB-INF/struts2-service.xml

</param-value>

</context-param>

</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:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd

http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<!-- 利用AOP,实现对Service的声明式事务管理 -->

<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="get*" read-only="true"/>

<!-- 删除,更新,添加事务配置 -->

<tx:method name="delete*" propagation="REQUIRED"

isolation="READ_COMMITTED"

timeout="-1"

read-only="false"

/>

<tx:method name="update*" propagation="REQUIRED"

isolation="READ_COMMITTED"

timeout="-1"

read-only="false"

/>

<tx:method name="add*" propagation="REQUIRED"

isolation="READ_COMMITTED"

timeout="-1"

read-only="false"

/>

<!-- 其他默认 -->

<tx:method name="*" />

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut id="servicepointcut" expression="execution(* com.ibatis.service.*.*(..))"/>

<aop:advisor advice-ref="txAdvice" pointcut-ref="servicepointcut"/>

</aop:config>

<!-- 配置数据源 -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

<property name="url" value="jdbc:sqlserver://localhost:1433; DatabaseName=DfcpMes"/>

<property name="username" value="sa"/>

<property name="password" value="sa"/>

</bean>

<!-- 配置事务管理 -->

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"/>

</bean>

<!-- 配置DAO -->

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

<property name="configLocation" value="WEB-INF/SqlMapConfig.xml"/>

<property name="dataSource" ref="dataSource"/>

</bean>

<bean id="baseDAO" class="com.ibatis.dao.BaseDAOImp">

<property name="sqlMapClient" ref="sqlMapClient"/>

</bean>

</beans>

struts2-action.xml配置完整内容:

<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"

"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<!-- spring管理struts的bean的配置文件-->

<beans>

<bean id ="baseAction" class ="com.ibatis.action.BaseAction" scope ="singleton" >

<property name ="userservice" >

<ref bean ="usersServiceImpl" />

</property>

<!-- 可添加多个Service注入 -->

</bean>

<!-- 其他Action类,都继承基Action -->

<bean id ="userAction" parent="baseAction" class ="com.ibatis.action.UserAction" scope ="prototype" >

</bean>

</beans>

struts2-service.xml配置完整内容:

<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"

"http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<!-- spring管理struts的bean的配置文件-->

<beans>

<bean id="baseService" scope="singleton"

class="com.ibatis.service.impl.BaseServiceImpl">

<property name="dao">

<ref bean="baseDAO"/>

</property>

</bean>

<bean name="usersServiceImpl" parent="baseService"

class="com.ibatis.service.impl.UserServiceImpl">

</bean>

</beans>

SqlMapConfig.xml配置完整内容:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig

PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<settings

cacheModelsEnabled="true"

enhancementEnabled="true"

lazyLoadingEnabled="true"

errorTracingEnabled="true"

maxRequests="32"

maxSessions="10"

maxTransactions="5"

useStatementNamespaces="true"

/>

<sqlMap resource="com/ibatis/bean/config/Users.xml"/>

</sqlMapConfig>

4.在src下建立POJO类,DAO类,Service类,Action类,log4j.properties,oscache.properties,struts.properties,struts.xml,结构如下



对每个类列出源码如下:

BaseAction.java源码

package com.ibatis.action;

import com.ibatis.service.IUserService;

import com.opensymphony.xwork2.ActionSupport;

public class BaseAction extends ActionSupport {

protected IUserService userservice;

public IUserService getUserservice() {

return userservice;

}

public void setUserservice(IUserService userservice) {

this.userservice = userservice;

}

}

UserAction.java源码

package com.ibatis.action;

import java.util.List;

import com.ibatis.bean.Users;

public class UserAction extends BaseAction {

private List<String> deleteLoginIdList;//批量删除用户(根据loginid字段)

private Users user;//添加用户,更新用户,删除用户(只给loginid赋值)时,使用

private List<Users> userList;//在页面中显示用户列表,批量添加时使用

public List<Users> getUserList() {

return userList;

}

public void setUserList(List<Users> userList) {

this.userList = userList;

}

public Users getUser() {

return user;

}

public void setUser(Users user) {

this.user = user;

}

public List<String> getDeleteLoginIdList() {

return deleteLoginIdList;

}

public void setDeleteLoginIdList(List<String> deleteLoginIdList) {

this.deleteLoginIdList = deleteLoginIdList;

}

/**

* 添加一个用户

* @return

*/

public String addUser()

{

userservice.addUser(user);//调用service执行添加

return "AddOrEdit";

}

/**

* 获取用户列表

* @return

*/

public String userList()

{

setUserList(userservice.getAllUsers());//调用service获取所有用户

return "ShowUserList";

}

/**

* 删除一个用户

* @return

*/

public String deleteOneUser()

{

userservice.deleteUser(user.getLoginid());

return "AddOrEdit";

}

/**

* 批量删除用户(根据LoginId字段)

* @return

*/

public String deleteBectchUser()

{

userservice.deleteBatchUser(deleteLoginIdList);

return "AddOrEdit";

}

/**

* 当点击编辑时,获取一个对象,再跳转到编辑页面

* @return

*/

public String fowardUpdateUser()

{

user=userservice.getOneUser(user.getLoginid());

return "ShowOneUser";

}

/**

* 更新一个用户

* @return

*/

public String updateUser()

{

userservice.updateUser(user);//调用service执行添加

return "AddOrEdit";

}

}

Users.java源码

package com.ibatis.bean;

public class Users {

private int id;

private String username;

private String loginid;

private String loginpassword;

private String roleid;

public String getRoleid() {

return roleid;

}

public void setRoleid(String roleid) {

this.roleid = roleid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getLoginid() {

return loginid;

}

public void setLoginid(String loginid) {

this.loginid = loginid;

}

public String getLoginpassword() {

return loginpassword;

}

public void setLoginpassword(String loginpassword) {

this.loginpassword = loginpassword;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

}

Users.xml配置文件完整内容

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap

PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="user_space">

<!-- 配置缓存LRU表示当缓存达到最大值后,先清除最少使用的记录,再在缓存中加入新记录 -->

<cacheModel id="userCache" type="OSCACHE">

<flushInterval hours="24"/>

<flushOnExecute statement="user_space.insertUsers"/>

<flushOnExecute statement="user_space.updateUsers"/>

<flushOnExecute statement="user_space.deleteUsersByLoginId"/>

<property name="size" value="1000" />

</cacheModel>

<typeAlias alias="user" type="com.ibatis.bean.Users"/>

<resultMap id="userResult" class="user">

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

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

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

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

</resultMap>

<!-- 返回结果为List -->

<select id="selectAllUsers" resultMap="userResult" cacheModel="userCache">

select * from Users

</select>

<!-- 根据loginid查询一个用户 -->

<select id="selectUsersByLoginId" parameterClass="String" resultClass="user">

<![CDATA[

select

loginid,

username,

loginpassword,

roleid

from users

where loginId = #loginid#

]]>

</select>

<insert id="insertUsers" parameterClass="user">

<!-- 生成主键的方式(post表示添加后生成,pre表示添加前生成如Oracle) -->

<selectKey resultClass="int" type="post" keyProperty="id" >

select @@IDENTITY as id

</selectKey>

<!-- oracle用序列生成主键的配置

<selectKey resultClass="int" type="pre" keyProperty="id" >

SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL

</selectKey>

-->

<![CDATA[

insert into users(

username,

loginid,

loginpassword,

roleid )

values(

#username#,#loginid#,#loginpassword#,#roleid#

)

]]>

</insert>

<update id="updateUsers" parameterClass="user">

<![CDATA[

update users set

username=#username#,

loginid=#loginid#,

loginpassword=#loginpassword#,

roleid=#roleid#

where

loginId = #loginid#

]]>

</update>

<delete id="deleteUsersByLoginId" parameterClass="String">

delete from users where loginId = #loginId#

</delete>

</sqlMap>

IBaseDAO.java源码:

package com.ibatis.dao;

import java.io.Serializable;

import java.util.List;

public interface IBaseDAO {

/**

* 插入一个实体(在数据库INSERT一条记录)

* @param <T>

* @param sqlStr

* @param entity

*/

public abstract <T> T insert(String sqlStr,T entity);

/**

* 修改一个实体对象(UPDATE一条记录)

* @param <T>

* @param sqlStr

* @param entity

* @return

*/

public abstract <T> int update(String sqlStr,T entity);

/**

* 根据指定的唯一列值,删除一行

* @param <T>

* @param sqlStr

* @param primaryKey

* @return

*/

public abstract <T> int delete(String sqlStr,T primaryKey);

/**

* 查询指定的sql语句的行数

* @param sqlStr

* @return

*/

public abstract int count(String sqlStr);

/**

* 按指定的唯一键,取一行

* @param <T>

* @param <PK>

* @param sqlStr

* @param primaryKey

* @return

*/

public abstract <T extends Object,PK> T getOne(String sqlStr,PK primaryKey);

/**

* 取全部记录

* @param <T>

* @param sqlStr

* @return

*/

public abstract <T> List<T> selectAll(String sqlStr);

/**

* 批量添加

* @param <T>

* @param sqlStr

* @param list

*/

public abstract <T> void batchInsert(String sqlStr,final List<T> list);

/**

* 批量修改

* @param <T>

* @param sqlStrs

* @param list

*/

public abstract <T> void batchUpdate(String sqlStrs,final List<T> list);

/**

* 批量删除

* @param <T>

* @param sqlStr

* @param list

*/

public abstract <T> void batchDelete(String sqlStr,final List<T> list);

}

BaseDAOImp.java源码:

package com.ibatis.dao;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import org.springframework.orm.ibatis.SqlMapClientCallback;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.sqlmap.client.SqlMapExecutor;

public class BaseDAOImp extends SqlMapClientDaoSupport implements IBaseDAO {

public int count(String strSql)

{

Integer result=0;

try {

result=(Integer)getSqlMapClient().queryForObject(strSql);

//return result;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

public <T> void batchDelete(final String sqlStr, final List<T> list) {

// TODO Auto-generated method stub

this.getSqlMapClientTemplate().execute( new SqlMapClientCallback() {

public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {

executor.startBatch();

for (T member : list) {

executor.delete(sqlStr, member);

}

executor.executeBatch();

return null;

}

});

}

public <T> void batchInsert(final String sqlStr,final List<T> list) {

// TODO Auto-generated method stub

SqlMapClientCallback callback = new SqlMapClientCallback() {

public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {

executor.startBatch();

for (T member : list) {

executor.insert(sqlStr, member);

}

executor.executeBatch();

return null;

}

};

this.getSqlMapClientTemplate().execute(callback);

}

public <T> void batchUpdate(final String sqlStr, final List<T> list) {

// TODO Auto-generated method stub

SqlMapClientCallback callback = new SqlMapClientCallback() {

public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {

executor.startBatch();

for (T member : list) {

executor.update(sqlStr, member);

}

executor.executeBatch();

return null;

}

};

this.getSqlMapClientTemplate().execute(callback);

}

public <T> int delete(String sqlStr, T primaryKey) {

// TODO Auto-generated method stub

int rows=-1;

try {

rows = getSqlMapClient().delete(

sqlStr, primaryKey);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return rows;

}

@SuppressWarnings("unchecked")

public <T extends Object, PK> T getOne(String sqlStr, PK primaryKey) {

// TODO Auto-generated method stub

T reuslt=null;

try {

reuslt=(T) getSqlMapClient().queryForObject(sqlStr, primaryKey);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return reuslt;

}

public <T> T insert(String sqlStr, T entity) {

// TODO Auto-generated method stub

T result=null;

try {

result=(T) getSqlMapClient().insert(sqlStr, entity);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

public <T> List<T> selectAll(String sqlStr) {

// TODO Auto-generated method stub

List<T> list=new ArrayList<T>();

try {

list= getSqlMapClient().queryForList(sqlStr);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

public <T> int update(String sqlStr, T entity) {

// TODO Auto-generated method stub

int rows=-1;

try {

rows = getSqlMapClient().update(

sqlStr, entity);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return rows;

}

}

IBaseService.java是一个空接口,其他Service类都要继承此接口的实现类

package com.ibatis.service;

public interface IBaseService {

}

BaseServiceImpl.java实现IBaseService接口

package com.ibatis.service.impl;

import com.ibatis.dao.IBaseDAO;

import com.ibatis.service.IBaseService;

public class BaseServiceImpl implements IBaseService {

protected IBaseDAO dao;

public IBaseDAO getDao() {

return dao;

}

public void setDao(IBaseDAO dao) {

this.dao = dao;

}

}

IUserService.java,业务类接口

package com.ibatis.service;

import java.util.List;

import com.ibatis.bean.Users;

public interface IUserService {

/**

* 添加一个用户

* @param user

*/

public abstract void addUser(Users user);

/**

* 更新一个用户(根据loginId字段)

* @param user

*/

public abstract void updateUser(Users user);

/**

* 根据账号,获取一个用户

* @param loginId

* @return

*/

public abstract Users getOneUser(String loginId);

/**

* 根据一个登陆账号删除一个用户

* @param loginId

*/

public abstract void deleteUser(String loginId);

/**

* 根据loginid列表批量删除用户

* @param loginIdList

*/

public abstract void deleteBatchUser(List<String> loginIdList);

/**

* 批量添加用户

* @param userList

*/

public abstract void addBatchUsers(List<Users> userList);

/**

* 获取所有用户

* @return

*/

public abstract List<Users> getAllUsers();

}

UserServiceImpl.java实现IUserService定义的所有方法

package com.ibatis.service.impl;

import java.util.List;

import com.ibatis.bean.Users;

import com.ibatis.service.IUserService;

public class UserServiceImpl extends BaseServiceImpl implements IUserService {

public void addBatchUsers(List<Users> userList) {

// TODO Auto-generated method stub

dao.batchInsert("user_space.insertUsers", userList);

}

public void addUser(Users user) {

// TODO Auto-generated method stub

dao.insert("user_space.insertUsers", user);

}

public void deleteUser(String loginId) {

// TODO Auto-generated method stub

dao.delete("user_space.deleteUsersByLoginId", loginId);

}

public List<Users> getAllUsers() {

// TODO Auto-generated method stub

return dao.selectAll("user_space.selectAllUsers");

}

public void deleteBatchUser(List<String> loginIdList) {

// TODO Auto-generated method stub

dao.batchDelete("user_space.deleteUsersByLoginId", loginIdList);

}

public void updateUser(Users user) {

// TODO Auto-generated method stub

dao.update("user_space.updateUsers", user);

}

public Users getOneUser(String loginId) {

// TODO Auto-generated method stub

return dao.getOne("user_space.selectUsersByLoginId", loginId);

}

}

log4j.properties内容:

#--------------------------------

# stdout表示控制台,fileout表示输出到文件

log4j.rootLogger=error, stdout

#log4j.logger.test=info

#log4j.logger.org.apache.jasper = DEBUG

#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG

#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG

log4j.logger.com.fiscal = DEBUG

log4j.logger.com.system = DEBUG

log4j.logger.com.ibatis = DEBUG

log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG

log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG

log4j.logger.java.sql.Connection = DEBUG

#log4j.logger.java.sql.Statement = DEBUG

#log4j.logger.java.sql.PreparedStatement = DEBUG

log4j.logger.java.sql.ResultSet = DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.fileout=org.apache.log4j.RollingFileAppender

log4j.appender.fileout.File=C\:\\ibatis.log

log4j.appender.fileout.MaxFileSize=10000KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n

log4j.appender.fileout.layout=org.apache.log4j.PatternLayout

log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n

#log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

# log4j.logger.org=info

#--------------------------------

oscache.properties内容

#是否使用内存作为缓存空间

cache.memory=true

#缓存管理事件监听器,通过这个监听器可以获知当前Cache的运行情况

#cache.event.listeners=com.opensymphony.oscache.plugins.clustersupport.JavaGroupsBroadcastingListener

#如果使用磁盘缓存(cache.memory=false),则需要指定磁盘存储接口实现

#cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener

# 磁盘缓存所使用的文件存储路径

# cache.path=c:\\myapp\\cache

# 缓存调度算法,可选的有LRU,FIFO和无限缓存(UnlimitedCache)

# cache.algorithm=com.opensymphony.oscache.base.algorithm.FIFOCache

# cache.algorithm=com.opensymphony.oscache.base.algorithm.UnlimitedCache

cache.algorithm=com.opensymphony.oscache.base.algorithm.LRUCache

#内存缓存的最大容量

cache.capacity=1000

# 是否限制磁盘缓存的容量

# cache.unlimited.disk=false

# 基于JMS的集群缓存同步配置

#cache.cluster.jms.topic.factory=java:comp/env/jms/TopicConnectionFactory

#cache.cluster.jms.topic.name=java:comp/env/jms/OSCacheTopic

#cache.cluster.jms.node.name=node1

struts.properies内容:

struts.configuration.xml.reload=true

struts.i18n.encoding=utf-8

struts.objectFactory=spring

struts.devMode=true

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>

<package name="userPackage" extends="struts-default" namespace="/sis">

<action name="userAc" class="userAction">

<result name="ShowUserList">/User/UserList.jsp</result>

<result name="ShowOneUser">/User/AddOrEditUser.jsp</result>

<!-- 指定添加或修改成功后,跳转到列表页面(要先经过Action重新加载一次) -->

<result name="AddOrEdit" type="redirect">sis/userAc!userList.action</result>

</action>

</package>

</struts>

6.创建两个Jsp文件,一个列表文件(包含批量删除),一个对用户进行添加或更新



UserList.jsp,源码:

<%@ 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 'List.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">

<style type="text/css">

table {

border: 1px solid black;

border-collapse: collapse;

}

table thead tr th {

border: 1px solid black;

padding: 3px;

background-color: #cccccc;

}

table tbody tr td {

border: 1px solid black;

padding: 3px;

}

</style>

</head>

<body>

<h2>用户列表</h2>

<form action="sis/userAc!deleteBectchUser.action" method="post">

<table cellspacing="0">

<thead>

<tr>

<th></th>

<th>登陆账号</th>

<th>用户名</th>

<th>密码</th>

<th>角色</th>

<th>操作</th>

</tr>

</thead>

<tbody>

<s:iterator value="userList" status="st">

<tr>

<td>

<input type="checkbox" name="deleteLoginIdList" value='<s:property value="loginid" />' />

<s:property value="#st.count"/>

</td>

<td><s:property value="loginid" /></td>

<td><s:property value="username" /></td>

<td><s:property value="loginpassword" /></td>

<td><s:property value="roleid" /></td>

<td>

<a href='<s:url action="sis/userAc!fowardUpdateUser.action"><s:param name="user.loginid" value="loginid" /></s:url>'>

编辑

</a>

 

<a href='<s:url action="sis/userAc!deleteOneUser.action"><s:param name="user.loginid" value="loginid" /></s:url>'>

删除

</a>

</td>

</tr>

</s:iterator>

<tr>

<td colspan="3">

<input type="submit" value="批量删除">

</td>

<td colspan="3">

<a href="User/AddOrEditUser.jsp">添加一个用户</a>

</td>

</tr>

</tbody>

</table>

</form>

</body>

</html>

AddOrEditUser.jsp,源码

<%@ 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 'Edit.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>

<body>

<h2>

<s:if test="null == user">

添加用户

<form action="sis/userAc!addUser.action" method="post">

</s:if>

<s:else>

编辑用户

<form action="sis/userAc!updateUser.action" method="post">

</s:else>

</h2>

<s:textfield name="user.loginid" label="登陆账号" />

<br>

<s:textfield name="user.username" label="用户名称" />

<br>

<s:textfield name="user.loginpassword" label="登陆密码" />

<br>

<s:textfield name="user.roleid" label="角色编号" />

<br>

<span style="float:left">

<s:submit value="提交" />

</span>

</form>

</body>

</html>

7.在Tomcat下发布,输入地址:http://localhost:8989/Struts2IbatisSpring/sis/sis/userAc!userList.action

效果如下,可批量删除,单个删除,更新,添加

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐