S2SH CRUD 整合

采用的框架 Struts2+Spring4+Hbiernate4.

 

目录结构

   

EmployeeAction:

  1 package com.xx.ssh.actions;
  2 
  3 import java.io.ByteArrayInputStream;
  4 import java.io.InputStream;
  5 import java.io.UnsupportedEncodingException;
  6 import java.util.Date;
  7 import java.util.Map;
  8 import org.apache.struts2.interceptor.RequestAware;
  9 import com.opensymphony.xwork2.ActionSupport;
 10 import com.opensymphony.xwork2.ModelDriven;
 11 import com.opensymphony.xwork2.Preparable;
 12 import com.xx.ssh.entities.Employee;
 13 import com.xx.ssh.service.DepartmentService;
 14 import com.xx.ssh.service.EmployeeService;
 15 
 16 public class EmployeeAction extends ActionSupport implements RequestAware,
 17         ModelDriven<Employee>, Preparable {
 18 
 19     private static final long serialVersionUID = 1L;
 20 
 21     private EmployeeService employssService;
 22 
 23     public void setEmployssService(EmployeeService employssService) {
 24         this.employssService = employssService;
 25     }
 26 
 27     private DepartmentService departmentService;
 28 
 29     public void setDepartmentService(DepartmentService departmentService) {
 30         this.departmentService = departmentService;
 31     }
 32 
 33     public String list() {
 34         request.put("employees", employssService.getAll());
 35         System.out.println("request: " + request.size());
 36         return "list";
 37     }
 38 
 39     private Integer id;
 40 
 41     public void setId(Integer id) {
 42         this.id = id;
 43     }
 44 
 45     private InputStream inputStream;
 46 
 47     public InputStream getInputStream() {
 48         return inputStream;
 49     }
 50     //回调函数。判断是否删除
 51     public String delete() {
 52         try {
 53             employssService.delete(id);
 54             inputStream = new ByteArrayInputStream("1".getBytes("UTF-8"));
 55         } catch (Exception e) {
 56             e.printStackTrace();
 57             try {
 58                 inputStream = new ByteArrayInputStream("0".getBytes("UTF-8"));
 59             } catch (UnsupportedEncodingException e1) {
 60                 e1.printStackTrace();
 61             }
 62         }
 63         return "ajax-success";
 64     }
 65 
 66     private String lastName;
 67 
 68     public void setLastName(String lastName) {
 69         this.lastName = lastName;
 70     }
 71     //回调函数。判断用户名是否存在。
 72     public String validateLastName() {
 73         try {
 74             if (employssService.lastNameIsValid(lastName)) {
 75 
 76                 inputStream = new ByteArrayInputStream("1".getBytes("utf-8"));
 77             } else {
 78 
 79                 inputStream = new ByteArrayInputStream("0".getBytes("utf-8"));
 80             }
 81         } catch (Exception e) {
 82 
 83         }
 84         return "ajax-success";
 85     }
 86 
 87     private Employee model;
 88 
 89     /*
 90      * 可以根椐ID来判断为save方法准备的model是new的还是数据库获取的。
 91      */
 92     public void prepareSave() {
 93         if (id == null) {
 94             model = new Employee();
 95         } else {
 96             model = employssService.get(id);
 97         }
 98     }
 99 
100     public String save() {
101 
102         if (id == null) {
103             model.setCreateTime(new Date());
104 
105         }
106         employssService.saveOrUpdate(model);
107         return SUCCESS;
108     }
109 
110     public String input() {
111         request.put("departments", departmentService.getAll());
112         return INPUT;
113     }
114 
115     public void prepareInput() {
116         if (id != null) {
117             model = employssService.get(id);
118         }
119 
120     }
121 
122     private Map<String, Object> request;
123 
124     @Override
125     public void setRequest(Map<String, Object> arg0) {
126         this.request = arg0;
127 
128     }
129 
130     @Override
131     public Employee getModel() {
132 
133         return model;
134     }
135 
136     @Override
137     public void prepare() throws Exception {
138 
139     }
140 
141 }
View Code

SSHDateConverter:自定义转换器

 1 package com.xx.ssh.converters;
 2 
 3 import java.text.DateFormat;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7 import java.util.Map;
 8 
 9 import org.apache.struts2.util.StrutsTypeConverter;
10 
11 public class SSHDateConverter extends StrutsTypeConverter {
12 
13     private DateFormat dateFormat;
14     {
15         dateFormat = new SimpleDateFormat("yyyy-MM-dd");
16     }
17     
18     @Override
19     public Object convertFromString(Map context, String[] values, Class toClass) {
20         if(toClass == Date.class){
21             try {
22                 return dateFormat.parse(values[0]);
23             } catch (ParseException e) {
24                 e.printStackTrace();
25             }
26         }
27         
28         return null;
29     }
30 
31     @Override
32     public String convertToString(Map context, Object o) {
33         if(o instanceof Date){
34             return dateFormat.format((Date)o);
35         }
36         return null;
37     }
38 
39 }
View Code

BaseDao:SessionFactory

 1 package com.xx.ssh.dao;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 
 6 public class BaseDao {
 7     private SessionFactory  sessionFactory;
 8 
 9     public void setSessionFactory(SessionFactory sessionFactory) {
10         this.sessionFactory = sessionFactory;
11     }
12     
13     public Session getSession() {
14         return  this.sessionFactory.getCurrentSession();
15     }
16 }
View Code

DepartmentDao:Dao层

 1 package com.xx.ssh.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.xx.ssh.entities.Department;
 6 
 7 public class DepartmentDao extends BaseDao{
 8     public List<Department> getAll(){
 9         String hql="FROM Department";
10         return getSession().createQuery(hql).list();
11     }
12 }
View Code

EmployeeDao

 1 package com.xx.ssh.dao;
 2 
 3 import java.util.List;
 4 
 5 import org.hibernate.Query;
 6 import org.hibernate.Session;
 7 import org.hibernate.SessionFactory;
 8 
 9 import com.xx.ssh.entities.Employee;
10 
11 public class EmployeeDao extends BaseDao {
12     
13     
14     public void delete(Integer id){
15         String hql="delete from Employee e where e.id=? ";
16         getSession().createQuery(hql).setInteger(0,id).executeUpdate();
17     }
18 
19     public List<Employee> getAll(){
20         
21         String hql="from Employee e LEFT OUTER JOIN FETCH e.department";
22         return getSession().createQuery(hql).list();
23     }
24     public void saveOrUpdate(Employee employee){
25         getSession().saveOrUpdate(employee);
26     }
27     public Employee getEmployeeByLastName(String lastName){
28         
29         String hql="from Employee e where e.lastName=? ";
30         Query query = getSession().createQuery(hql).setString(0,lastName);
31         return (Employee)query.uniqueResult();
32     }
33     public Employee get(Integer id){
34         return (Employee) getSession().get(Employee.class,id);
35         
36     }
37 }
View Code

实体:Department

 1 package com.xx.ssh.entities;
 2 
 3 public class Department {
 4     private Integer id;
 5     private String departmentName;
 6 
 7     public Integer getId() {
 8         return id;
 9     }
10 
11     public void setId(Integer id) {
12         this.id = id;
13     }
14 
15     public String getDepartmentName() {
16         return departmentName;
17     }
18 
19     public void setDepartmentName(String departmentName) {
20         this.departmentName = departmentName;
21     }
22 }
View Code

实体:Employee

 1 package com.xx.ssh.entities;
 2 
 3 import java.util.Date;
 4 
 5 public class Employee {
 6     
 7     
 8     //
 9     private Integer id;
10     //不能被修改
11     private String lastName;
12     private String email;
13     //从前端传入的是string类型,所以需要注意转换。
14     private Date birth;
15     //不能被修改
16     private Date createTime;
17     //单向n-1的关联关系
18     private Department department;
19     
20     public Integer getId() {
21         return id;
22     }
23     public void setId(Integer id) {
24         this.id = id;
25     }
26     public String getLastName() {
27         return lastName;
28     }
29     public void setLastName(String lastName) {
30         this.lastName = lastName;
31     }
32     public String getEmail() {
33         return email;
34     }
35     public void setEmail(String email) {
36         this.email = email;
37     }
38     public Date getBirth() {
39         return birth;
40     }
41     public void setBirth(Date birth) {
42         this.birth = birth;
43     }
44     public Date getCreateTime() {
45         return createTime;
46     }
47     public void setCreateTime(Date createTime) {
48         this.createTime = createTime;
49     }
50     public Department getDepartment() {
51         return department;
52     }
53     public void setDepartment(Department department) {
54         this.department = department;
55     }
56     
57     @Override
58     public String toString() {
59         return "Employee [birth=" + birth + ", createTime=" + createTime
60                 + ", department.id=" + department + ", email=" + email + ", id="
61                 + id + ", lastName=" + lastName + "]";
62     }
63 }
View Code

表与类映射文件配置。

Department.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2014-7-22 11:21:48 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.xx.ssh.entities.Department" table="SSH_DEPARTMENT">
 7         <id name="id" type="java.lang.Integer">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11       
12         <property name="departmentName" type="java.lang.String">
13             <column name="DEPARTMENT_NAME" />
14         </property>
15         
16     </class>
17 </hibernate-mapping>
View Code

Employee.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2014-7-22 11:21:48 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.xx.ssh.entities.Employee" table="SSH_EMPLOYEE">
 7         
 8         <id name="id" type="java.lang.Integer">
 9             <column name="ID" />
10             <generator class="native" />
11         </id>
12         
13         <property name="lastName" type="java.lang.String">
14             <column name="LAST_NAME" />
15         </property>
16         
17         <property name="email" type="java.lang.String">
18             <column name="EMAIL" />
19         </property>
20         
21         <property name="birth" type="java.util.Date">
22             <column name="BIRTH" />
23         </property>
24         
25         <property name="createTime" type="java.util.Date">
26             <column name="CREATE_TIME" />
27         </property>
28         
29         <!-- 映射单向 n-1 的关联关系 -->
30         <many-to-one name="department" class="com.xx.ssh.entities.Department" lazy="false">
31             <column name="DEPARTMENT_ID" />
32         </many-to-one>
33         
34     </class>
35 </hibernate-mapping>
View Code

Service层:Department

 1 package com.xx.ssh.service;
 2 
 3 import java.util.List;
 4 
 5 import com.xx.ssh.dao.DepartmentDao;
 6 import com.xx.ssh.entities.Department;
 7 
 8 public class DepartmentService {
 9     private DepartmentDao departmentDao;
10     
11     public void setDepartmentDao(DepartmentDao departmentDao){
12         this.departmentDao=departmentDao;
13     }
14     public List<Department>getAll(){
15         return departmentDao.getAll();
16     }
17     
18 }
View Code

Service层:Employee

 1 package com.xx.ssh.service;
 2 
 3 import java.util.List;
 4 
 5 import com.xx.ssh.dao.EmployeeDao;
 6 import com.xx.ssh.entities.Employee;
 7 
 8 public class EmployeeService {
 9     private EmployeeDao employeeDao;
10     
11     public void setEmployeeDao(EmployeeDao employeeDao)
12     {
13         this.employeeDao=employeeDao;
14     }
15     public boolean lastNameIsValid(String lastName){
16         return employeeDao.getEmployeeByLastName(lastName)==null;
17     }
18     public void delete(Integer id){
19         employeeDao.delete(id);
20     }
21     public void saveOrUpdate(Employee employee){
22         employeeDao.saveOrUpdate(employee);
23     }
24     public List<Employee> getAll(){
25         List<Employee> employees=employeeDao.getAll();
26         /*employees.clear();*/
27         System.out.println(employees.size());
28         return employees;
29     }
30     public  Employee get(Integer id) {
31         // TODO Auto-generated method stub
32         return employeeDao.get(id);
33         
34     }
35     
36 }
View Code

配置文件:

applicationContext-beans.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 5     http://www.springframework.org/schema/beans/spring-beans.xsd">
 6     
 7     <bean id="employeeDao" class="com.xx.ssh.dao.EmployeeDao">
 8         <property name="sessionFactory" ref="sessionFactory"></property>
 9     </bean>
10     
11     <bean id="departmentDao" class="com.xx.ssh.dao.DepartmentDao">
12         <property name="sessionFactory" ref="sessionFactory"></property>
13     </bean>
14                                      
15     <bean id="employeeService" class="com.xx.ssh.service.EmployeeService">
16         <property name="employeeDao" ref="employeeDao"></property>
17     </bean>
18     
19     <bean id="departmentService" class="com.xx.ssh.service.DepartmentService">
20         <property name="departmentDao" ref="departmentDao"></property>
21     </bean>
22     
23     <bean id="employeeAction" class="com.xx.ssh.actions.EmployeeAction"
24         scope="prototype">
25         <property name="employssService" ref="employeeService"></property>
26         <property name="departmentService" ref="departmentService"></property>
27     </bean>
28 </beans>
View Code

applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 8         http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/aop 
10         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
11         http://www.springframework.org/schema/context 
12         http://www.springframework.org/schema/context/spring-context-4.0.xsd
13         http://www.springframework.org/schema/tx 
14         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
15 
16     <!-- 导入资源文件 -->
17     <context:property-placeholder location="classpath:db.properties"/>
18 
19     <!-- 配置 C3P0 数据源 -->
20     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
21         <property name="user" value="${jdbc.user}"></property>
22         <property name="password" value="${jdbc.password}"></property>
23         <property name="driverClass" value="${jdbc.driverClass}"></property>
24         <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
25     </bean>
26     
27     <!-- 配置 SessionFactory -->
28     <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
29         <property name="dataSource" ref="dataSource"></property>
30         <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
31         <property name="mappingLocations" value="classpath:com/xx/ssh/entities/*.hbm.xml"></property>
32     </bean>
33     
34     <!-- 配置 Spring 的声明式事务 -->
35     <!-- 1. 配置 hibernate 的事务管理器 -->
36     <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
37         <property name="sessionFactory" ref="sessionFactory"></property>
38     </bean>
39 
40     <!-- 2. 配置事务属性 -->
41     <tx:advice id="txAdvice" transaction-manager="transactionManager">
42         <tx:attributes>
43             <tx:method name="get*" read-only="true"/>
44             <tx:method name="lastNameIsValid" read-only="true"/>
45             <tx:method name="*"/>
46         </tx:attributes>
47     </tx:advice>
48     
49     <!-- 3. 配置事务切入点, 再把事务属性和事务切入点关联起来 -->
50     <aop:config>
51         <aop:pointcut expression="execution(* com.xx.ssh.service.*.*(..))" id="txPointcut"/>
52         <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
53     </aop:config>
54 </beans>
View Code

db.properties

1 jdbc.user=root
2 jdbc.password=root
3 jdbc.driverClass=com.mysql.jdbc.Driver
4 jdbc.jdbcUrl=jdbc:mysql:///spring6
5 
6 jdbc.initPoolSize=5
7 jdbc.maxPoolSize=10
View Code

hibernate.cfg.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <session-factory>
 7         <!-- 配置hibernate的基本属性-->
 8         
 9         <!-- 方言 -->
10         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
11         
12         <!--是否显示及格式化SQL-->
13         <property name="hibernate.show_sql">true</property>
14         <property name="hibernate.format_sql">true</property>
15         
16         <!-- 生成数据表的策略 -->
17         <property name="hibernate.hbm2ddl.auto">update</property>
18         
19         <!--二级缓存相关  -->
20     </session-factory>
21 </hibernate-configuration>
View Code

struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 
 6 <struts>
 7 
 8     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
 9     <constant name="struts.devMode" value="true" />
10 
11     <package name="default" namespace="/" extends="struts-default">
12     
13         <!-- 定义新的拦截器栈, 配置 prepare 拦截器栈的 alwaysInvokePrepare 参数值为 false -->
14         <interceptors>
15             <interceptor-stack name="sshStack">
16                 <interceptor-ref name="paramsPrepareParamsStack">
17                     <param name="prepare.alwaysInvokePrepare">false</param>
18                 </interceptor-ref>
19             </interceptor-stack>
20         </interceptors>
21         
22         <!-- 使用新的拦截器栈 -->
23         <default-interceptor-ref name="sshStack"></default-interceptor-ref>
24     
25         <action name="emp-*" class="employeeAction"
26             method="{1}">
27             <result name="list">/WEB-INF/views/emp-list.jsp</result>
28             <result type="stream" name="ajax-success">
29                 <param name="contentType">text/html</param>
30                 <param name="inputName">inputStream</param>
31             </result>    
32             <result name="input">/WEB-INF/views/emp-input.jsp</result>
33             <result name="success" type="redirect">/emp-list</result>
34         </action>
35             
36     </package>
37 
38 </struts>
View Code

xwork-conversion.properties :时间转换器配置文件。

java.util.Date=com.xx.ssh.converters.SSHDateConverter

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 6 
 7 
 8     <context-param>
 9         <param-name>contextConfigLocation</param-name>
10         <param-value>classpath:applicationContext*.xml</param-value>
11     </context-param>
12     <listener>
13         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
14     </listener>  <!-- 为spring添加监听器 -->
15     <!-- 配置 Struts2 的 Filter -->
16     <filter>
17         <filter-name>struts2</filter-name>
18         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
19     </filter>
20     <filter-mapping>
21         <filter-name>struts2</filter-name>
22         <url-pattern>/*</url-pattern>
23     </filter-mapping>
24 </web-app>
View Code

JSP:

emp-input.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/scripts/jquery-1.8.0.js"></script>
<script type="text/javascript">
    $(function(){
        $(":input[name=lastName]").change(function(){
            var val= $(this).val();
            val=$.trim(val);
            var $this=$(this);
            if(val!=""){
                $this.nextAll("font").remove();
                var url="emp-validateLastName";
                var args={"lastName":val,"time":new Date()};
                
                $.post(url,args,function(data){
                
                    //表示可用
                    if(data == "1"){
                        $this.after("<font color='green'>LastName可用</font>" );
                    }
                    //表示不可用
                    else if(data == "0") {
                        $this.after("<font color='red'>LastName不可用</font>" );
                    }else{
                        alert("服务器错误");
                    }
                })
            }else{
                //alert("lastName 不能为空");
                var i=$(this).val("");
                alert(i);
                //this.focus();
            }
        })
    })
</script>
</head>
<body>

    <s:debug></s:debug>

    <h4>Employee Input Page</h4>

    <s:form action="emp-save" method="post">
        <s:if test="id != null">
            <s:textfield name="lastName" label="LastName" disabled="true"></s:textfield>
            <s:hidden name="id"></s:hidden>
            <%-- 
            <!-- 通过添加隐藏域的方式把未显式提交的字段值提交到服务器 -->
            <s:hidden name="lastName"></s:hidden>
            <s:hidden name="createTime"></s:hidden>
            --%>
        </s:if>
        <s:else>
            <s:textfield name="lastName" label="LastName"></s:textfield>
        </s:else>
        
        <s:textfield name="email" label="Email"></s:textfield>
        <s:textfield name="birth" label="Birth"></s:textfield>
        
        <s:select list="#request.departments"
            listKey="id" listValue="departmentName" name="department.id"
            label="Department"></s:select>
        <s:submit></s:submit>    
    </s:form>

</body>
</html>

emp-list.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!--  -->
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/scripts/jquery-1.8.0.js"></script>
<script type="text/javascript" >
    $(function(){
        //1.点击delete时,弹出确定是要删除xx的信息吗。若确定,删除。反之。取消
        $(".delete").click(function(){
            var lastName=$(this).next(":input").val();
            var flag=confirm("确定是要删除"+lastName+"信息吗?");
            if(flag){
                var $tr=$(this).parent().parent();
            
                //删除,使用ajax方式 。
                 var url=this.href;
                 var args={"time":new Date()};
                 $.post(url,args,function(data){
                     //若data的返回值为1.则提示删除成功,且把当前行删除 。
                     if(data=="1"){
                         alert("删除成功");
                         $tr.remove();
                     }else{
                         alert("删除失败");    
                     }
                 });
            }
            //取消默认行为。
            return false;
        });
        
    });

</script>
</head>
<body>
    <h4>Employee List Page</h4>
    <s:if test="#request.employees == null || #request.employees.size()==0">
        没有任何员工信息;
    </s:if>
    <s:else>
        <table border="1" cellpadding="10" cellspacing="0">
            <tr>
                <td>ID</td>
                <td>LASTNAME</td>
                <td>EMAIL</td>
                <td>BIRTH</td>
                <td>CREATETIME</td>
                <td>DEPT</td>
                <td>DELETE</td>
                <td>Edit</td>
            </tr>
        <s:iterator value="#request.employees">
            <tr>
                <td>${id } </td>
                <td>${lastName }</td>
                <td>${email }</td>
                <td>
                    <s:date name="birth" format="yyyy-MM-dd"/>
                </td>
                <td>
                    <s:date name="birth" format="yyyy-MM-dd hh:mm:ss"/>
                </td>
                <td>${department.departmentName }</td>
                <td><a href="emp-delete?id=${id }" class="delete">Delete</a>
                    <input type="hidden" value="${lastName }"/>
                </td>
                <td><a href="emp-input?id=${id }">Edit</a></td>
            </tr>
        </s:iterator>
        </table>
    </s:else>
</body>
</html>

整合过程出现的异常请点我:

 

posted on 2016-12-07 23:49 zhouixi 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/1-Admin/p/6143299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值