Struts2.2入门By CRUD

  SSH中Struts可谓是比较常用的框架了。通过对Struts官方文档的阅读了解到Struts主要包含:原理和配置文件(所有框架都会涉及的)、拦截器(Interceptors)、Actions、Results、数据验证、国际化、OGNL和数据类型转换、标签以及Struts与其他框架如DWR、Spring、Hibernate等框架的结合使用。 今天主要先整体说明一下Struts,然后写一个CRUD Demo,让自己对Struts有个整体上的认识。细节性问题在以后的博文中再详细说明。

Struts原理

Struts 内核采用了AOP ,所以进行了解耦和,我们对照上面这张图熟悉一个请求在Struts2 中的处理大概分为一下几个步骤:

1、 客户端初始化一个指向Servlet 容器(例如Tomcat )的请求;

2、 这个请求经过一系列的过滤器(Filter ),接着FilterDispatcher (在web.xml 中进行配置)被调用,FilterDispatcher 询问ActionMapper 来决定这个请求是否需要调用某个Action

3、 如果ActionMapper 决定需要调用某个Action ,那么FilterDispatcher 会把请求的处理交给ActionProxy

4、 ActionProxy 通过Configuration Manager 询问框架的配置文件,找到需要调用的Action 类;

5、 ActionProxy 创建一个ActionInvocation 的实例(Action 调度器,实现拦截器与Actioncross-cut (横切));

6、 ActionInvocation 实例使用命名模式来调用,在调用Action 的过程前后,涉及到相关拦截器(Intercepter )的调用;

7、 一旦Action 执行完毕,ActionInvocation 负责根据struts.xml 中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action 链)一个需要被表示的JSP 或者FreeMarker 的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

这里需要对 ActionProxy 进行一点说明的是,ActionProxy 不仅可以实现Action 的功能,还可以在不发生耦合的情况下在Action 之前之后插入一些拦截器。

 

    上面理论上了解了一下Struts2 的处理流程,下面我们来一个CRUD Demo 来实践一下,在列出代码之前,先说明一下,Struts 的开发步骤:

        1、 struts2 的包添加到lib

Jar

说明

struts2-core-2.1.8.1.jar

Struts2 的核心包

xwork-core-2.1.6.jar

Command 模式框架,WebWorkStruts2 都基于xwork

commons-logging-1.0.4.jar

Java 日志工具类包

freemarker-2.3.15.jar

模板引擎,一个基于模板生成文本输出的通用工具

ognl-2.7.3.jar

Object-Graph Navigation Language ,表达式语言,用来获取和设置Java 对象属

如果想要实现上传还要再多加commons-fileupload-1.2.1.jarcommons-io-1.3.2.jar

        2 、实现相应的Actionjsp 页面

        3 、在web.xml 中配置MVC 控制器(Struts 核心过滤器)

        4 、生成struts.xml(src) 的配置文件及映射Actionjsp 页面

 

    为了方便,我直接将数据以集合的形式存储,而没用存在数据库中去了。Ok ,废话说了很多,直接上代码:

    首先配置文件

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>Struts2CRUD</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<!-- struts核心过滤器 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

 struts.xml(src目录下):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<constant name="struts.devMode" value="true" />
	<constant name="struts.custom.i18n.resources" value="guest" />

	<!-- Configuration for the default package. -->
	<package name="default" extends="struts-default" namespace="/">

		<!-- setup the default-stack exception mapping interceptor so that any 
			exceptions not caught by this application will be logged and then handled 
			by the global exception mapping -->
		<interceptors>
			<interceptor-stack name="appDefault">
				<interceptor-ref name="defaultStack">
					<param name="exception.logEnabled">true</param>
					<param name="exception.logLevel">ERROR</param>
				</interceptor-ref>
			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="appDefault" />


		<global-results>
			<result name="error">/page/error.jsp</result>
		</global-results>


		<global-exception-mappings>
			<exception-mapping exception="java.lang.Exception"
				result="error" />
		</global-exception-mappings>


		<action name="index" class="com.iflytek.action.ListEmployeeAction">
			<result name="success">/page/employeeList.jsp</result>
		</action>

		<action name="addEmployee" class="com.iflytek.action.EmployeeAction"
			method="input">
			<result name="input">/page/employeeEdit.jsp</result>
		</action>

		<action name="saveEmployee" class="com.iflytek.action.EmployeeAction"
			method="save">
			<result name="success" type="redirectAction">
				<param name="actionName">index</param>
			</result>
			<result name="input">/page/employeeEdit.jsp</result>
		</action>

		<action name="editEmployee" class="com.iflytek.action.EmployeeAction"
			method="input">
			<result name="input">/page/employeeEdit.jsp</result>
		</action>

		<action name="deleteEmployee" class="com.iflytek.action.EmployeeDeleteAction"
			method="delete">
			<result name="success" type="redirectAction">
				<param name="actionName">index</param>
			</result>
			<result name="input">/page/employeeEdit.jsp</result>
		</action>

	</package>

</struts>
 

View

index.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Redirecting</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=index.action">
</head>
<body>

</body>
</html>
 

employeeList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<head>
<link href="<s:url value='/css/main.css'/>" rel="stylesheet"
	type="text/css" />
<title><s:text name="label.employees" /></title>
<style type="text/css">
th {
	text-align: center;
}
</style>
</head>
<body>
	<div class="titleDiv">
		<s:text name="application.title" />
	</div>
	<h1>
		<s:text name="label.employees" />
	</h1>
	<s:url var="url" action="addEmployee" />
	<a href="<s:property value="#url"/>">添加员工</a>
	<br />
	<br />
	<table class="borderAll">
		<tr>
			<th><s:text name="label.firstName" /></th>
			<th><s:text name="label.lastName" /></th>
			<th><s:text name="label.age" /></th>
			<th><s:text name="label.department" /></th>
			<th><s:text name="label.salary" /></th>
			<th><s:text name="label.oper" /></th>
		</tr>
		<s:iterator value="employees" status="status">
			<tr class="<s:if test="#status.even">even</s:if><s:else>odd</s:else>">
				<td class="nowrap"><s:property value="firstName" /></td>
				<td class="nowrap"><s:property value="lastName" /></td>
				<td class="nowrap"><s:property value="age" /></td>
				<td class="nowrap"><s:property value="department.name" /></td>
				<td class="nowrap"><s:property value="salary" /></td>
				<td class="nowrap"><s:url action="editEmployee" var="url">
						<s:param name="employee.employeeId" value="employeeId" />
					</s:url> <a href="<s:property value="#url"/>">编辑</a> &nbsp;&nbsp;&nbsp; <s:url
						action="deleteEmployee" var="url">
						<s:param name="employee.employeeId" value="employeeId" />
					</s:url> <a href="<s:property value="#url"/>">删除</a></td>
			</tr>
		</s:iterator>
	</table>

</body>
</html>
 

employeeEdit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:if test="employee==null || employee.employeeId == null">
	<s:set name="title" value="%{'添加员工'}" />
</s:if>
<s:else>
	<s:set name="title" value="%{'编辑员工'}" />
</s:else>

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<head>
<link href="<s:url value='/css/main.css'/>" rel="stylesheet"
	type="text/css" />
<style>
td {
	white-space: nowrap;
}
</style>
<title><s:property value="#title" /></title>
<s:head />
</head>
<body>
	<div class="titleDiv">
		<s:text name="application.title" />
	</div>
	<h1>
		<s:property value="#title" />
	</h1>
	<s:actionerror />
	<s:actionmessage />
	<s:form action="saveEmployee" method="post">
		<s:textfield key="employee.firstName" size="40" />
		<s:textfield key="employee.lastName" size="40" />
		<s:textfield key="employee.age" size="20" />
		<s:select key="employee.department.departmentId" list="departments"
			listKey="departmentId" listValue="name" />
		<s:textfield key="employee.salary" size="20" />
		<s:hidden name="employee.employeeId" />
		<s:submit key="submit" />
	</s:form>

</body>
</html>
 

error.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

<head>
<title>Error</title>
</head>

<body>
	<h4>The application has malfunctioned.</h4>
	<p>Please contact technical support with the following information:</p>

	<!-- the exception and exceptionStack bean properties
		were created by Struts2's Exception Intercepter  -->
	<h4>
		Exception Name:
		<s:property value="exception" />
	</h4>
	<h4>
		Exception Details:
		<s:property value="exceptionStack" />
	</h4>
	<p>
		<a href="index.action">Return to the home page.</a>
	</p>
</body>

</html>

页面中用到的提示信息

guest.properties(src目录下)

#labels
application.title=Struts2 CRUD Demo
label.employees=\u5458\u5DE5\u4FE1\u606F
label.delete=\u5220\u9664
label.edit=\u7F16\u8F91
label.employee.edit=\u7F16\u8F91\u5458\u5DE5
label.employee.add=\u6DFB\u52A0\u5458\u5DE5
label.firstName=\u540D\u5B57
label.lastName=\u59D3
label.department=\u6240\u5C5E\u90E8\u95E8
label.age=\u5E74\u9F84
label.salary=\u85AA\u6C34
label.oper=\u64CD\u4F5C

employee.firstName=\u540D\u5B57
employee.lastName=\u59D3
employee.department.departmentId=\u6240\u5C5E\u90E8\u95E8
employee.age=\u5E74\u9F84
employee.salary=\u85AA\u6C34

submit=\u63D0\u4EA4

##-- errors
errors.prefix=<span style="color:red;font-weight:bold;">
errors.suffix=</span>
errors.general=\u51FA\u73B0\u9519\u8BEF
errors.required.firstname=\u540D\u5B57\u5FC5\u586B\uFF01
errors.required.lastname=\u59D3\u5FC5\u586B\uFF01
errors.required.age=\u5E74\u9F84\u5FC5\u586B\uFF01
errors.required.age.limit=\u5E74\u9F84\u5728 ${min} \u5230 ${max}\u4E4B\u95F4\uFF01
errors.required.department=\u90E8\u95E8\u5FC5\u586B\uFF01
 

Action

 

ListEmployeeAction.java

package com.iflytek.action;

import java.util.List;

import org.apache.log4j.Logger;

import com.iflytek.model.Employee;
import com.iflytek.service.IEmployeeService;
import com.iflytek.serviceImpl.EmployeeServiceImpl;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午8:48:08
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 *       员工列表
 * 
 */
public class ListEmployeeAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	@SuppressWarnings("unused")
	private static Logger logger = Logger.getLogger(ListEmployeeAction.class
			.getName());

	private static IEmployeeService empService = new EmployeeServiceImpl();
	private List<Employee> employees;

	/**
	 * Create collection of Employee objects.
	 * 
	 * @return success
	 */
	public String execute() throws Exception {
		setEmployees(empService.getAllEmployees());

		return SUCCESS;

	}

	public List<Employee> getEmployees() {
		return employees;
	}

	public void setEmployees(List<Employee> employees) {
		this.employees = employees;
	}

}
 

EmployeeAction.java

package com.iflytek.action;

import java.util.List;

import org.apache.log4j.Logger;

import com.iflytek.model.Department;
import com.iflytek.model.Employee;
import com.iflytek.service.IDepartmentService;
import com.iflytek.service.IEmployeeService;
import com.iflytek.serviceImpl.DepartmentServiceImpl;
import com.iflytek.serviceImpl.EmployeeServiceImpl;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午5:03:17
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 * 员工的Action
 * 
 */
public class EmployeeAction extends ActionSupport implements Preparable {

	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(EmployeeAction.class
			.getName());
	private static IEmployeeService empService = new EmployeeServiceImpl();
	private static IDepartmentService deptService = new DepartmentServiceImpl();
	private Employee employee;
	private List<Department> departments;

	/**
	 * Ensures that the collection of Department objects is always available to
	 * the view.
	 */
	public void prepare() throws Exception {
		departments = deptService.getAllDepartments();

		logger.debug("in method prepare");

	}

	/**
	 * Saves a new employee if the employee object's employeeId is null
	 * otherwise updates existing employee.
	 * 
	 * @return success
	 */
	public String save() {
		logger.debug("in method save");

		if (employee.getEmployeeId() == null) {
			empService.insertEmployee(employee);
		} else {
			empService.updateEmployee(employee);
		}
		return SUCCESS;
	}

	/**
	 * Gets a specific Employee objects so it can be displayed in the view.
	 * 
	 * @return input
	 */
	public String input() {
		logger.debug("in method input");

		if (employee != null && employee.getEmployeeId() != null) {
			logger.debug("Employee ID is " + employee.getEmployeeId());
			employee = empService.getEmployee(employee.getEmployeeId());
		}
		return INPUT;
	}

	public Employee getEmployee() {
		return employee;
	}

	public void setEmployee(Employee employee) {
		this.employee = employee;
	}

	public List<Department> getDepartments() {
		return departments;
	}
}

EmployeeDeleteAction.java

package com.iflytek.action;

import org.apache.log4j.Logger;

import com.iflytek.model.Employee;
import com.iflytek.service.IEmployeeService;
import com.iflytek.serviceImpl.EmployeeServiceImpl;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * @author xdwang 
 * 
 * @date 2012-6-6 下午8:38:14
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 *
 */
public class EmployeeDeleteAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(EmployeeDeleteAction.class
			.getName());
	private static IEmployeeService empService = new EmployeeServiceImpl();

	private Employee employee;

	/**
	 * Delete the Employee object based on the value of the employeeId field
	 * from the data repository.
	 * 
	 * @return success
	 */
	public String delete() {
		logger.debug("in method delete");

		if (employee != null && employee.getEmployeeId() != null) {
			logger.debug("Employee ID is " + employee.getEmployeeId());

		}
		empService.deleteEmployee(employee.getEmployeeId());

		return SUCCESS;
	}

	public Employee getEmployee() {
		return employee;
	}

	public void setEmployee(Employee employee) {
		this.employee = employee;
	}

}

同目录下的验证.xml

EmployeeAction-validation.xml

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
       "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  <field name="employee.firstName">
     <field-validator type="requiredstring">
          <message key="errors.required.firstname"/>
      </field-validator>
  </field>
  <field name="employee.lastName">
     <field-validator type="requiredstring">
          <message key="errors.required.lastname"/>
      </field-validator>
  </field>
  <field name="employee.age">
     <field-validator type="required" short-circuit="true">
          <message key="errors.required.age"/>
      </field-validator>
      <field-validator type="int">
      		<param name="min">18</param>
      		<param name="max">65</param>
          	<message key="errors.required.age.limit"/>
      </field-validator>
  </field>
</validators>

service接口

 IDepartmentService.java

package com.iflytek.service;

import java.util.List;

import com.iflytek.model.Department;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午9:11:15
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 */
public interface IDepartmentService {
	public List<Department> getAllDepartments();
}
 

IEmployeeService.java

package com.iflytek.service;

import java.util.List;

import com.iflytek.model.Employee;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午9:14:20
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 */
public interface IEmployeeService {
	public List<Employee> getAllEmployees();

	public void updateEmployee(Employee emp);

	public void deleteEmployee(Integer id);

	public Employee getEmployee(Integer id);

	public void insertEmployee(Employee emp);
}
 

service实现

DepartmentServiceImpl.java

package com.iflytek.serviceImpl;

import java.util.List;

import com.iflytek.dao.IDepartmentDao;
import com.iflytek.daoImpl.DepartmentDaoImpl;
import com.iflytek.model.Department;
import com.iflytek.service.IDepartmentService;

/**
 * 
 * @author xdwang 
 * 
 * @date 2012-6-6 下午9:16:11
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 *
 */
public class DepartmentServiceImpl implements IDepartmentService {
	private IDepartmentDao dao;

	public DepartmentServiceImpl() {
		this.dao = new DepartmentDaoImpl();
	}

	public List<Department> getAllDepartments() {
		return dao.getAllDepartments();
	}
}

 EmployeeServiceImpl.java

package com.iflytek.serviceImpl;

import java.util.List;

import com.iflytek.dao.IEmployeeDao;
import com.iflytek.daoImpl.EmployeeDaoImpl;
import com.iflytek.model.Employee;
import com.iflytek.service.IEmployeeService;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午9:21:42
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 */
public class EmployeeServiceImpl implements IEmployeeService {
	private IEmployeeDao dao;

	public EmployeeServiceImpl() {
		this.dao = new EmployeeDaoImpl();
	}

	public List<Employee> getAllEmployees() {
		return dao.getAllEmployees();
	}

	public void updateEmployee(Employee emp) {
		dao.update(emp);
	}

	public void deleteEmployee(Integer id) {
		dao.deleteById(id);
	}

	public Employee getEmployee(Integer id) {
		return dao.getEmployeeById(id);
	}

	public void insertEmployee(Employee emp) {
		dao.insert(emp);
	}
}
 

DAO接口

IDepartmentDao.java

package com.iflytek.dao;

import java.util.List;
import java.util.Map;

import com.iflytek.model.Department;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午8:52:17
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 */
public interface IDepartmentDao {

	/**
	 * 获取所有部门信息
	 */
	public List<Department> getAllDepartments();

	public Map<Integer, Department> getDepartmentsMap();
}

IEmployeeDao.java

package com.iflytek.dao;

import java.util.List;

import com.iflytek.model.Employee;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午8:52:31
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 */
public interface IEmployeeDao {
	/**
	 * 获取所有员工信息
	 * @return 员工信息集合
	 */
	public List<Employee> getAllEmployees();

	/**
	 * 根据id获取员工信息
	 * @param id 员工id
	 * @return 员工实体信息
	 */
	public Employee getEmployeeById(Integer id);

	/**
	 * 更新员工信息
	 * @param employee 员工实体信息
	 */
	public void update(Employee employee);

	/**
	 * 插入员工信息
	 * @param employee 员工实体信息
	 */
	public void insert(Employee employee);

	/**
	 * 根据员工id删除员工信息
	 * @param id 员工id
	 */
	public void deleteById(Integer id);
}

 

DAO实现

DepartmentDaoImpl.java

package com.iflytek.daoImpl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.iflytek.dao.IDepartmentDao;
import com.iflytek.model.Department;

/**
 * 
 * @author xdwang 
 * 
 * @date 2012-6-6 下午8:58:55
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 *
 */
public class DepartmentDaoImpl implements IDepartmentDao {
	private static List<Department> departments;
	private static Map<Integer, Department> departmentsMap;
	static {
		departments = new ArrayList<Department>();
		departments.add(new Department(new Integer(100), "研发部"));
		departments.add(new Department(new Integer(200), "人事部"));
		departments.add(new Department(new Integer(300), "销售部"));
		departmentsMap = new HashMap<Integer, Department>();
		Iterator<Department> iter = departments.iterator();
		while (iter.hasNext()) {
			Department dept = (Department) iter.next();
			departmentsMap.put(dept.getDepartmentId(), dept);
		}
	}

	public List<Department> getAllDepartments() {
		return departments;
	}

	public Map<Integer, Department> getDepartmentsMap() {
		return departmentsMap;
	}
}

EmployeeDaoImpl.java

package com.iflytek.daoImpl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.iflytek.dao.IDepartmentDao;
import com.iflytek.dao.IEmployeeDao;
import com.iflytek.model.Department;
import com.iflytek.model.Employee;

/**
 * 
 * @author xdwang
 * 
 * @date 2012-6-6 下午9:01:59
 * 
 * @email [email protected]
 * 
 * @blog xdwangiflytek.iteye.com
 * 
 */
public class EmployeeDaoImpl implements IEmployeeDao {
	private static Map<Integer, Department> departmentsMap;
	private static ArrayList<Employee> employees;
	static {
		employees = new ArrayList<Employee>();
		employees.add(new Employee(new Integer(1), "小明", "王", new Integer(
				36), new Department(new Integer(100), "研发部"), "50000"));
		employees.add(new Employee(new Integer(2), "三丰", "张", new Integer(
				25), new Department(new Integer(300), "销售部"), "35000"));
		IDepartmentDao deptDao = new DepartmentDaoImpl();
		departmentsMap = deptDao.getDepartmentsMap();
	}

	public List<Employee> getAllEmployees() {
		return employees;
	}

	public Employee getEmployeeById(Integer id) {
		Employee emp = null;
		Iterator<Employee> iter = employees.iterator();
		while (iter.hasNext()) {
			emp = (Employee) iter.next();
			if (emp.getEmployeeId().equals(id)) {
				break;
			}
		}
		return emp;
	}

	public void update(Employee employee) {
		Integer id = employee.getEmployeeId();
		for (int i = 0; i < employees.size(); i++) {
			Employee tempEmp = (Employee) employees.get(i);
			if (tempEmp.getEmployeeId().equals(id)) {
				employee.setDepartment((Department) departmentsMap.get(employee
						.getDepartment().getDepartmentId()));
				employees.set(i, employee);
				break;
			}
		}
	}

	public void insert(Employee employee) {
		int lastId = 0;
		Iterator<Employee> iter = employees.iterator();
		while (iter.hasNext()) {
			Employee temp = (Employee) iter.next();
			if (temp.getEmployeeId().intValue() > lastId) {
				lastId = temp.getEmployeeId().intValue();
			}
		}
		employee.setDepartment((Department) departmentsMap.get(employee
				.getDepartment().getDepartmentId()));
		employee.setEmployeeId(new Integer(lastId + 1));
		employees.add(employee);
	}

	public void deleteById(Integer id) {
		for (int i = 0; i < employees.size(); i++) {
			Employee tempEmp = (Employee) employees.get(i);
			if (tempEmp.getEmployeeId().equals(id)) {
				employees.remove(i);
				break;
			}
		}
	}
}

ok,搞定,最后的一个效果图如下所示:

效果图

通过开始的Struts图结合Demo,可以整体上对Struts2.2开发流程以及请求处理流程有了个认识。

猜你喜欢

转载自xdwangiflytek.iteye.com/blog/1553556
今日推荐