添加员工
①. 显示表单页面: 需要先查询所有的部门信息
在index.jsp中添加链接
<a href="emp-input">Add New Employee</a>
在actions中添加
public String input(){
request.put("departments", departmentService.getAll());
return INPUT;
}
实现DepartmentDao.java
package com.keshe.ssh.dao;
import java.util.List;
import com.keshe.ssh.entities.Department;
public class DepartmentDao extends BaseDao{
public List<Department> getAll(){
String hql = "FROM Department";
return getSession().createQuery(hql).list();
}
}
创建DepartmentService.java
package com.keshe.ssh.service;
import java.util.List;
import com.keshe.ssh.dao.DepartmentDao;
import com.keshe.ssh.entities.Department;
public class DepartmentService {
private DepartmentDao departmentDao;
public void setDepartmentDao(DepartmentDao departmentDao) {
this.departmentDao = departmentDao;
}
public List<Department> getAll(){
return departmentDao.getAll();
}
}
在EmployeeAction.java中添加
private DepartmentService departmentService;
public void setDepartmentService(DepartmentService departmentService) {
this.departmentService = departmentService;
}
在Struts配置文件中实现input的对应页面
<result name="input">/WEB-INF/views/emp-input.jsp</result>
创建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="scripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function(){
$(":input[name=lastName]").change(function(){
var val = $(this).val();
val = $.trim(val);
var $this = $(this);
if(val != ""){
//把当前节点后面的所有 font 兄弟节点删除
$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 不能为空");
$(this).val("");
$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>
在beans配置文件中添加
<bean id="departmentDao" class="com.keshe.ssh.dao.DepartmentDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="departmentService" class="com.keshe.ssh.service.DepartmentService">
<property name="departmentDao" ref="departmentDao"></property>
</bean>
<bean id="employeeAction" class="com.keshe.ssh.actions.EmployeeAction"
scope="prototype">
<property name="employeeService" ref="employeeService"></property>
<property name="departmentService" ref="departmentService"></property>
</bean>
到此时,可以显示添加页面
②. 使用 Struts2 的 ModelDriven 和 Preparable 拦截器,将提交的表单信息封装为一个对象
先使action类实现ModelDriven 和 Preparable
public class EmployeeAction extends ActionSupport implements RequestAware,
ModelDriven<Employee>, Preparable{
@Override
public void prepare() throws Exception {}
private Employee model;
@Override
public Employee getModel() {
return model;
}
定义save
public String save(){
if(id == null){
model.setCreateTime(new Date());
}
employeeService.saveOrUpdate(model);
return SUCCESS;
}
在Employee.java重写toString
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", birth=" + birth + ", createTime=" + createTime
+ ", department=" + department + "]";
}
③. 时间是一个字符串, 需要转为一个 Date 类型的对象
定义类型转换器
创建com.keshe.ssh.converters包,并创建SSHDateConverter.java
package com.keshe.ssh.converters;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class SSHDateConverter extends StrutsTypeConverter {
private DateFormat dateFormat;
{
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
}
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
if(toClass == Date.class){
try {
return dateFormat.parse(values[0]);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public String convertToString(Map context, Object o) {
if(o instanceof Date){
return dateFormat.format((Date)o);
}
return null;
}
}
增加配置文件
创建xwork-conversion.properties
java.util.Date=com.keshe.ssh.converters.SSHDateConverter
在Struts新拦截器栈中添加
<result name="success" type="redirect">/emp-list</result>
在actions中添加
public void prepareSave(){
if(id == null){
model = new Employee();
}else{
model = employeeService.get(id);
}
}
保存传入
dao中EmployeeDao.java添加
public void saveOrUpdate(Employee employee){
getSession().saveOrUpdate(employee);
}
在actions中实现保存
public String save(){
if(id == null){
model.setCreateTime(new Date());
}
//执行保存操作
employeeService.saveOrUpdate(model);
return SUCCESS;
}
至此,可以完成添加,其中createtime与birth字段都是自己添加时候写的生日日期,其中birth不显示小时分秒,而createtime显示