S2SH CRUD 整合

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ABB 機器人 添加多任務

首先&#xff0c;需要啟用多任務選項的控制器。 要做到這一點&#xff0c;創建一個新的機器人控制器RobotStudio站 - >選擇機器人&#xff08;控制器菜單&#xff09; - >.................. - >系統生成器 - >選擇控制器 - >修改...下一頁 - >下一步 - >…

poj2594(二分圖,最小路徑覆蓋變形)

Treasure ExplorationTime Limit: 6000MS Memory Limit: 65536KTotal Submissions: 7611 Accepted: 3126Description Have you ever read any book about treasure exploration? Have you ever see any film about treasure exploration? Have you ever explored treasure? …

【機器視覺】——相機鏡頭篇

目錄 一、相關概念 1、相機 2、鏡頭 二、相關參數 1、相機參數 1)芯片尺寸

閉包(計算機科學)

在計算機科學中&#xff0c;閉包&#xff08;Closure&#xff09;又稱詞法閉包或函數閉包。是引用了自由變量的函數。這個被引用的自由變量將會和函數在一起。即使離開了創建它的環境也不例外。所以另一種關于閉包的說法&#xff1a;由函數和其引用相關的環境構成的實體。閉包在…

C語言小機器人

[cpp] view plaincopyprint? # include <stdio.h> # include <stdlib.h> # define MAXSTR 200 # define REBOT "小C說: " # define YOUR "您 說: " # define EXIT "-e\n" # define NOREPLY "我不知道你說什么呢…

分享12306搶票心得-終極秒殺思路篇

12306搶票的關鍵拼的就是整點出票的速度&#xff0c;快的幾秒鐘&#xff0c;慢的幾分鐘&#xff0c;本文提供終極搶票攻略&#xff0c;通過多線程掃描上萬個CDN&#xff0c;來大幅度提升出票速度。準備一&#xff1a;需要了解CDN和切站的機制&#xff0c;請參考&#xff1a;分享…

JVM內幕:Java虛擬機詳解

為什么80%的碼農都做不了架構師&#xff1f;>>> 這篇文章解釋了Java 虛擬機&#xff08;JVM&#xff09;的內部架構。下圖顯示了遵守 Java SE 7 規范的典型的 JVM 核心內部組件。 上圖顯示的組件分兩個章節解釋。第一章討論針對每個線程創建的組件&#xff0c;第二章…

【機器視覺】——光源篇(分類、選型)

目錄 ? 一、光源相關知識 1、光的作用 2、光的顏色 二、光源的種類

ABB機器人 系統參數配置

系統參數用于定義系統配置并在出廠時根據客戶的需要定義。 可使用 FlexPendant 或 RobotStudio Online 編輯系統參數。 此步驟介紹如何查看 系統參數配置。 操作 &#xff1a; 1. 在 ABB 菜單上&#xff0c;點擊控制面板。 2. 點擊配置。顯示選定主題的可用類型列表。 3. 點…

MFC BCGControlBar 庫 使用方法

安裝 BCGControlBar 庫到你的計算機&#xff1a; 解壓縮 BCGControlBar.zip &#xff08;比如&#xff0c;到 c:\bcg 目錄中&#xff09;把 c:\bcg\bin 增加到你的 path 環境變量中&#xff0c;運行 Visual C 并且打開 Tools | Options 對話框&#xff0c;切換到Directories 頁…

四則運算2開發簡介

四則運算2在四則運算1的基礎之上&#xff0c;又添加了新的功能&#xff0c;但是我覺得四則運算2的難度比四則運算1增大了很多&#xff0c;我在編程的過程中&#xff0c;遇到的最大難度就是不知該如何更好的融合各個功能之間的關系。 寫到現在&#xff0c;四則運算2主要實現了以…

ABB機器人的 備份與恢復

保存內容 備份功能可保存上下文中的所有系統參數、系統模塊和程序模塊。 備份內容 數據保存于用戶指定的目錄中。 默認路徑可加以設置。 目錄分為四個子目錄&#xff1a;Backinfo、Home、Rapid 和 Syspar。 System.xml 也保存于包含用戶設置的 ../backup &#xff08;根…

flask項目開發中,遇到http 413錯誤

在flask項目中&#xff0c;上傳文件時后臺報http 413 Request Entity Too Large 請求體太大錯誤&#xff01; 解決的2種方法&#xff1a; 1.在flask配置中設置 MAX_CONTENT_LENGTH的值; 如設置為20M ( MAX_CONTENT_LENGTH20*1024*1024) 這時小于20M的文件都可以上傳 相關連接&…

【機器視覺】——畸變與矯正

目錄 一、什么是畸變?畸變的原因是什么? 1、徑向畸變(桶形畸變和枕形畸變)

ApplicationContextAware 接口

一、這個接口有什么用&#xff1f; 當一個類實現了這個接口&#xff08;ApplicationContextAware&#xff09;之后&#xff0c;這個類就可以方便獲得ApplicationContext中的所有bean。換句話說&#xff0c;就是這個類可以直接獲取spring配置文件中&#xff0c;所有有引用到的be…

Java之泛型練習

package cn.itcast.generics;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;/** 方法一&#xff1a;實現Comparable接口*/ //class Person implements Comparable<Person> {//實現Comparable接口&#xff0c;使得集合元素具備可比較…

ABB 配置文件

配置文件 配置文件是列出系統參數值的文本文件。 注意&#xff1a; 如果該參數指定默認值&#xff0c;那么就不會被列在 配置文件。 控制器中有六個配置區域&#xff0c;配置文件保存為后綴 .CFG文件。 配置文件默認保存在系統文件夾SYSPAR&#xff0c;例如.. \ MySystem\ …

巨杉db

巨杉數據庫 and mongo db ,分布式數據庫&#xff0c; 轉載于:https://www.cnblogs.com/feiyun8616/p/8178116.html

【深度學習】——物體檢測細節處理(NMS、樣本不均衡、遮擋物體)

目錄 一、候選框大量重疊問題 1、NMS核心思想 2、 步驟&#xff1a; 3、缺陷 4、改進 1&#xff09;soft NMS——衰減的方式來減小預測框的分類得分 2&#xff09;softer nms——增加了位置置信度 二、樣本不平衡問題 1、不平滑的來源&#xff08;3方面&#xff09; 1&a…