SSH_框架整合4--添加员工信息

一、

1 index.jsp:添加:<a href="emp-input">添加员工向信息:Add Employees' Information</a>

2 因为在添加员工信息时要选择员工的部门信息,所以要先获取Department信息:

  (1)com.atguigu.ssh.dao中:提取EmployeeDao.java中公共部分代码(getSession())作为父类BaseDao

  

 SSH_框架整合4--添加员工信息

    新建DepartmentDao类来获取Department集合信息:DepartmentDao.java

  

 package com.atguigu.ssh.dao;

 import java.util.List;

 import com.atguigu.ssh.entities.Department;

 public class DepartmentDao extends BaseDao{

     //获取查询到的Department集合
public List<Department> getAll(){
String hql="FROM Department";
return getSession().createQuery(hql).list();
}
}

  (2)com.atguigu.ssh.service包中:新建DepartmentService类:DepartmentService.java 

  

 package com.atguigu.ssh.service;

 import java.util.List;

 import com.atguigu.ssh.dao.DepartmentDao;
import com.atguigu.ssh.entities.Department; public class DepartmentService { private DepartmentDao departmentDao;
public void setDepartmentDao(DepartmentDao departmentDao) {
this.departmentDao = departmentDao;
} public List<Department> getAll(){
return departmentDao.getAll();
}
}

  (3) com.atguigu.ssh.actions包下的EmployeeAction.java:填写获取Department集合的方法并且放入request中(jsp页面中就可以通过request直接获取)

  

 //3-1  查询Department
private DepartmentService departmentService;
public void setDepartmentService(DepartmentService departmentService) {
this.departmentService = departmentService;
}
//3-2 实现添加员工信息的方法
public String input(){
request.put("departments", departmentService.getAll());
return INPUT;
}

3  完善applicationContext-beans.xml 

  

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="employeeDao" class="com.atguigu.ssh.dao.EmployeeDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <bean id="departmentDao" class="com.atguigu.ssh.dao.DepartmentDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <bean id="employeeService" class="com.atguigu.ssh.service.EmployeeService">
<property name="employeeDao" ref="employeeDao"></property>
</bean> <bean id="departmentService" class="com.atguigu.ssh.service.DepartmentService">
<property name="departmentDao" ref="departmentDao"></property>
</bean> <bean id="employeeAction" class="com.atguigu.ssh.actions.EmployeeAction"
scope="prototype">
<property name="employeeService" ref="employeeService"></property>
<property name="departmentService" ref="departmentService"></property>
</bean>
</beans>

4 完善struts.xml,添加显示添加页面语句:<result name="input">/WEB-INF/views/emp-input.jsp</result>

5  WebContent-WEB-INF-views下新建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>
</head>
<body>
<h4>Employee Input Page</h4> <s:form action="emp-save" method="post">
<s:textfield name="lastName" label="LastName"></s:textfield>
<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>

二、

1 实现ModelDriven拦截器操作

   (1)EmployeeAction实现ModelDriven<Employee>,Preparable接口,添加实现方法: 

 //****
@Override
public void prepare() throws Exception {
}
//****
private Employee model;
//****
@Override
public Employee getModel() {
return model;
}
//**** 4 使用ModelDriven拦截器方法存储添加的信息
public String save(){
System.out.println(model);
model.setCreateTime(new Date());
employeeService.saveorUpdate(model);
return SUCCESS;
}
//****
public void prepareSave(){
model=new Employee();
} //**** 拦截器的方法
public void prepareInput(){ }

  (2)Struts.xml配置下拦截器: 

 <!-- 定义新的拦截器栈,
配置 prepare 拦截器栈的 alwaysInvokePrepare 参数值为 false -->
<interceptors>
<interceptor-stack name="sshStack">
<interceptor-ref name="paramsPrepareParamsStack">
<param name="prepare.alwaysInvokePrepare">false</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 使用新的拦截器栈 -->
<default-interceptor-ref name="sshStack"></default-interceptor-ref>

2 定制类型转换器:使输入的Birth字符串转化为Date类型

  (1)新建包com.atguigu.ssh.converters:新建SSHDateConverter.java类     

  

 package com.atguigu.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; public SSHDateConverter()
{
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
} @Override
public Object convertFromString(Map context, String[] values, Class toClass) {
if(toClass == Date.class){
if(values !=null && values.length>0){
String value=values[0];
try {
return dateFormat.parse(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
return values;
} @Override
public String convertToString(Map context, Object o) {
if(o instanceof Date){
Date date=(Date)o;
return dateFormat.format(date);
}
return null;
} }

  (2)src-cong下新建xwork-conversion.properties,配置类型转换器:

  java.util.Date=com.atguigu.ssh.converters.SSHDateConverter

3 实现存储操作:

  (1)EmployeeDao.java中添加save方法: 

 //3 添加、存储
public void saveOrUpadate(Employee employee){
getSession().saveOrUpdate(employee);
}

  (2)EmployeeService.java

 //3 添加、存储
public void saveorUpdate(Employee employee){
employeeDao.saveOrUpadate(employee);
}

  (3)EmployeeAction.java: 

 //**** 4 使用ModelDriven拦截器方法存储添加的信息
public String save(){
System.out.println(model);
model.setCreateTime(new Date());
employeeService.saveorUpdate(model);
return SUCCESS;
}
//****
public void prepareSave(){
model=new Employee();
}

4 显示页面:格式化时间操作:

 <td>
<s:date name="birth" format="yyyy-MM-dd"/>
</td>
<td>
<s:date name="createTime" format="yyyy-MM-dd hh:mm:ss"/>
</td>

结构图:

  

文件:

1 EmployeeAction.java 

 package com.atguigu.ssh.actions;

 import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map; import org.apache.struts2.interceptor.RequestAware; import com.atguigu.ssh.entities.Employee;
import com.atguigu.ssh.service.DepartmentService;
import com.atguigu.ssh.service.EmployeeService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable; public class EmployeeAction extends ActionSupport implements RequestAware,
ModelDriven<Employee>,Preparable{ private static final long serialVersionUID = 1L; private EmployeeService employeeService; public void setEmployeeService(EmployeeService employeeService){
this.employeeService=employeeService;
} //**** 4 使用ModelDriven拦截器方法存储添加的信息
public String save(){
System.out.println(model);
model.setCreateTime(new Date());
employeeService.saveorUpdate(model);
return SUCCESS;
}
//****
public void prepareSave(){
model=new Employee();
} //3-1 查询Department
private DepartmentService departmentService;
public void setDepartmentService(DepartmentService departmentService) {
this.departmentService = departmentService;
}
//3-2 实现添加员工信息的方法
public String input(){
request.put("departments", departmentService.getAll());
return INPUT;
} //**** 拦截器的方法
public void prepareInput(){ } //2 删除
private Integer id;
public void setId(Integer id) {
this.id = id;
}
/*public String delete(){
employeeService.delete(id);
return SUCCESS;
}*/
//2-1 使用Ajax方式删除
private InputStream inputStream; public InputStream getInputStream() {
return inputStream;
} public String delete(){
employeeService.delete(id);
try {
//删除成功
inputStream=new ByteArrayInputStream("1".getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
//删除失败
try {
inputStream=new ByteArrayInputStream("0".getBytes("UTF-8"));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
return "ajax-delete-success";
}
//1 查询
public String list(){
request.put("employees", employeeService.getAll());
return "list";
} //放到页面里
private Map<String,Object> request; @Override
public void setRequest(Map<String, Object> arg0) {
this.request=arg0;
} //****
@Override
public void prepare() throws Exception {
}
//****
private Employee model;
//****
@Override
public Employee getModel() {
return model;
} }

2 struts.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default">
<!-- 定义新的拦截器栈,
配置 prepare 拦截器栈的 alwaysInvokePrepare 参数值为 false -->
<interceptors>
<interceptor-stack name="sshStack">
<interceptor-ref name="paramsPrepareParamsStack">
<param name="prepare.alwaysInvokePrepare">false</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 使用新的拦截器栈 -->
<default-interceptor-ref name="sshStack"></default-interceptor-ref> <action name="emp-*" class="employeeAction"
method="{1}">
<result name="list">/WEB-INF/views/emp-list.jsp</result> <result type="stream" name="ajax-delete-success">
<param name="contentType">text/html</param>
<param name="inputName">inputStream</param>
</result>
<result name="input">/WEB-INF/views/emp-input.jsp</result> <result name="success" type="redirect">/emp-list</result>
</action>
</package> </struts>

3 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="scripts/jquery-1.7.2.js"></script>
<script type="text/javascript">
//删除, 使用 ajax 的方式
$(function(){
$(".delete").click(function(){
var lastName=$(this).next(":input").val();
var flag=confirm("是否要删除"+lastName+"的信息吗?");
//确认删除, 使用 ajax 的方式
if(flag){
//获取要删除的行
var $tr=$(this).parent().parent();
var url=this.href;
var args={"time":new Date()};
$.post(url,args,function(data){
//若 data 的返回值为 1, 则提示 删除成功, 且把当前行删除
if(data==1){
alert("删除成功!");
$tr.remove();
}else{
//若 data 的返回值不是 1, 提示删除失败.
alert("删除失败!");
}
});
}
return false;
});
})
</script>
</head>
<body>
<h3>Employee List Page</h3> <s:if test="#request.employees == null ||#request.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>
</tr>
<s:iterator value="#request.employees">
<tr>
<td>${id}</td>
<td>${lastName}</td>
<td>${email }</td>
<%--
<td>${birth}</td>
<td>${createTime}</td>
--%>
<td>
<s:date name="birth" format="yyyy-MM-dd"/>
</td>
<td>
<s:date name="createTime" 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>
</tr>
</s:iterator>
</table>
</s:else>
</body>
</html>

4 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>
</head>
<body>
<h4>Employee Input Page</h4> <s:form action="emp-save" method="post">
<s:textfield name="lastName" label="LastName"></s:textfield>
<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>

  

  

    

SSH_框架整合4--添加员工信息的更多相关文章

  1. SSH_框架整合6--修改Edit员工信息

    SSH_框架整合6--修改Edit员工信息 1 加上修改Edit键 (1)emp-list.jsp <td> <a href="emp-input?id=${id }&qu ...

  2. SSH_框架整合2—查询显示

    4. 完成功能. (1)com.atguigu.ssh.actions包下新建EmployeeAction.java package com.atguigu.ssh.actions; import j ...

  3. SSH_框架整合7--整个项目CODE

    一 架构 1Action类 2 配置文件 3 View页面 二  Code 1 src (1)com.atguigu.ssh.actions >EmployeeAction.java packa ...

  4. SSH_框架整合5--验证用户名是否可用

    SSH_框架整合5--验证用户名是否可用 1 emp-input.jsp中编写ajax验证用户名是否可用: <script type="text/javascript" SR ...

  5. SSH_框架整合1

    1 WEB环境下配置Spring   因为是在WEB环境中应用Spring,所以要先配置web.xml: (1)WebContent-WEB-INF-lib包中,加入Spring包下的required ...

  6. SSH_框架整合3-删除

    一.普通删除 1 完善src中 类: (1)EmployeeDao.java中: //2 删除 public void delete(Integer id){ String hql="DEL ...

  7. JavaWeb_day03_员工信息添加修改删除

    day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...

  8. jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)

    1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...

  9. 基于SSH实现员工管理系统之框架整合篇

    本篇文章来源于:https://blog.csdn.net/zhang_ling_yun/article/details/77803178 以下内容来自慕课网的课程:基于SSH实现员工管理系统之框架整 ...

随机推荐

  1. MongoDB国内学术研究(部分)

    1.<MongoDB在煤炭行业GIS数据存储方面的应用> mongoDB的技术介绍占到了文章的60%,剩下的还能说些啥呢,呵呵. 2.<基于MongoDB的矢量空间数据云存储与处理系 ...

  2. #include #import @class 的一些用法区别

    从网上查了一些资料,整理了一下,发现很多都说的比较详尽,下面摘录自网络 说一下#import同class之间的区别 在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明 ...

  3. Javascript模块化编程(三):require.js的用法【转】

    作者: 阮一峰 日期: 2012年11月 7日 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js ...

  4. UDP通讯程序设计---6

    一.函数化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据-------->recvfrom 发送数据-------- ...

  5. kinect在ros上的初步测试---17

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.在使用本贴前必须先按照我的上一个博文正确在ubuntu上安装kinect驱动:http:// ...

  6. wordpress(一)wordpress环境的搭建

    搭建wordpress环境因为自动安装的脚本不提供创建数据库的功能,所以先要创建数据库. 1.使用如下命令创建数据库(都是在已经登陆的mysql界面中的命令) ①CREATE DATABASE 数据库 ...

  7. 牧场安排(usaco NOV06.cowfood)

    ohn新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土地里种上美味的草,供他的奶 ...

  8. const 常引用

    常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象的值是不能被更新的. 这篇主要说常引用.常引用是指所引用的对象不能被更新. 在实际应用中,常引用往往用来作为函数的形参,这样的参数称 ...

  9. ExtJS-Viewport背景图片铺满浏览器视图并自动伸缩

    var viewport = Ext.create('Ext.container.Viewport', { style : 'background-image:url(login_bj.jpg);ba ...

  10. supervisor运行golang守护进程

    最近在鼓捣golang守护进程的实现,无意发现了supervisor这个有意思的东西.supervisor是一个unix的系统进程管理软件,可以用它来管理apache.nginx等服务,若服务挂了可以 ...