课设第三天:员工信息添加界面

添加员工

①. 显示表单页面: 需要先查询所有的部门信息
在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显示

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值