• 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>

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

  • 相关阅读:
    Novell 被收购
    NetBeans IDE 7.0 Beta 发布
    关于去除PE文件中函数修饰的做法
    甲骨文宣布将于明年 7 月 28 日推 JDK 7
    PE文件格式的一些研究
    如何开发 Web 应用程序
    Novell 被收购
    如何开发 Web 应用程序
    分享:DFC开发平台的设计理念
    分享:FireBreath 1.7.0 RC1 发布
  • 原文地址:https://www.cnblogs.com/1-Admin/p/6143299.html
Copyright © 2020-2023  润新知