首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。
一 设计实体和表
1.建立javabean,建立角色类Role.java,具体如下:
1 package cn.clear.oa.domain; 2 3 public class Role { 4 5 private Long id; 6 private String name; 7 private String description; 8 public Long getId() { 9 return id; 10 } 11 public void setId(Long id) { 12 this.id = id; 13 } 14 public String getName() { 15 return name; 16 } 17 public void setName(String name) { 18 this.name = name; 19 } 20 public String getDescription() { 21 return description; 22 } 23 public void setDescription(String description) { 24 this.description = description; 25 } 26 27 28 }
2.建立相应的Role.hbm.xml映射文件,具体如下:
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="cn.clear.oa.domain"> 7 <class name="Role" table="oa_role"> 8 <id name="id"><generator class="native"/></id> 9 <property name="name"/> 10 <property name="description"/> 11 </class> 12 </hibernate-mapping>
3.将上面的映射文件在hibernate.cfg.xml中配置,内容如下:
<mapping resource="cn/clear/oa/domain/Role.hbm.xml" />
二 岗位管理功能分析:
查询:点击岗位管理,进入一个结果列表显示页面,在这个页面里,分别有添加,修改,删除按钮。(需要一个请求)
添加:点击添加,进入添加页面,然后填写完信息,点击保存,返回到结果列表显示页面。(需要两个请求)
修改:点击修改,进入修改页面,然后填写完信息,点击保存,返回到结果列表显示页面。(需要两个请求)
删除:点击删除,弹出是否删除对话框,点击是,删除该条记录。(需要一个请求)
注意:从一个功能转到另一个功能,必须用重定向,防止刷新重复提交表单;一个功能的内部跳转使用转发。所以查询,添加,修改,删除需要用到重定向。
增删改查共有4个功能,需要6个请求。需要相应6个Action方法,每个Action方法处理一个请求。
功能 | 方法名 | 返回值 | 结果页面 |
列表(查询) | list() | list | list.jsp |
删除 | delete() | toList | list.jsp |
添加 | add() | toList | list.jsp |
添加页面 | addUI() | addUI | addUI.jsp |
修改 | edit() | toList | list.jsp |
修改页面 | editUI() | editUI | editUI.jsp |
根据上表的分析,我们定制实现功能的步骤,然后根据步骤去一一实现,以下为步骤:
1).写Action类,写类中方法,实现方法,确定Service中的方法。
写相应的Action方法。我们先写一个RoleAction.java,然后在里面写相应的Action方法,具体内容如下:
1 package cn.clear.oa.view.action; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import org.springframework.context.annotation.Scope; 8 import org.springframework.stereotype.Controller; 9 10 import cn.clear.oa.domain.Role; 11 import cn.clear.oa.service.RoleService; 12 13 import com.opensymphony.xwork2.ActionContext; 14 import com.opensymphony.xwork2.ActionSupport; 15 16 @Controller 17 @Scope("prototype") 18 public class RoleAction extends ActionSupport{ 19 20 @Resource 21 private RoleService roleService; 22 23 private Long id; 24 private String name; 25 private String description; 26 /**显示列表*/ 27 public String list() throws Exception { 28 List<Role> roleList = roleService.findAll(); 29 ActionContext.getContext().put("roleList", roleList); 30 return "list"; 31 } 32 /**添加页面*/ 33 public String addUI() throws Exception { 34 35 return "addUI"; 36 } 37 /**添加*/ 38 public String add() throws Exception { 39 //封装数据到对象 40 Role role = new Role(); 41 role.setName(name); 42 role.setDescription(description); 43 //将对象保存到数据库 44 roleService.save(role); 45 return "toList"; 46 } 47 /**修改页面*/ 48 public String editUI() throws Exception { 49 //准备回显数据 50 Role role = roleService.findById(id); 51 //将对象的值放在栈顶 52 ActionContext.getContext().getValueStack().push(role); 53 return "editUI"; 54 } 55 /**修改*/ 56 public String edit() throws Exception { 57 //拿到准备好修改的对象 58 Role role = roleService.findById(id); 59 //设置要修改的属性 60 role.setName(name); 61 role.setDescription(description); 62 //将对象持久化到数据库 63 roleService.update(role); 64 return "toList"; 65 } 66 /**删除*/ 67 public String delete() throws Exception { 68 roleService.delete(id); 69 return "toList"; 70 } 71 //---- 72 public Long getId() { 73 return id; 74 } 75 public void setId(Long id) { 76 this.id = id; 77 } 78 public String getName() { 79 return name; 80 } 81 public void setName(String name) { 82 this.name = name; 83 } 84 public String getDescription() { 85 return description; 86 } 87 public void setDescription(String description) { 88 this.description = description; 89 } 90 91 92 }
2).写Service类,并写相应方法。确定Dao中的方法。
RoleService.java
1 package cn.clear.oa.service; 2 3 import java.util.List; 4 5 import cn.clear.oa.domain.Role; 6 7 public interface RoleService { 8 9 List<Role> findAll(); 10 11 void delete(Long id); 12 13 void save(Role role); 14 15 Role findById(Long id); 16 17 void update(Role role); 18 19 }
RoleServiceImpl.java
1 package cn.clear.oa.service.impl; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import org.springframework.stereotype.Service; 8 import org.springframework.transaction.annotation.Transactional; 9 10 import cn.clear.oa.dao.RoleDao; 11 import cn.clear.oa.domain.Role; 12 import cn.clear.oa.service.RoleService; 13 @Service 14 @Transactional 15 public class RoleServiceImpl implements RoleService{ 16 @Resource 17 private RoleDao roleDao; 18 19 public List<Role> findAll() { 20 21 return roleDao.findAll(); 22 } 23 24 public void delete(Long id) { 25 26 roleDao.delete(id); 27 } 28 29 public void save(Role role) { 30 31 roleDao.save(role); 32 } 33 34 public Role findById(Long id) { 35 return roleDao.findById(id); 36 } 37 38 public void update(Role role) { 39 40 roleDao.update(role); 41 } 42 43 }
3).写相应的Dao类,并写相应方法,实现。(之前我们已经整合了dao层的代码,所以现在所用方法就比较简洁了)
RoleDao.java
1 package cn.clear.oa.dao; 2 3 import cn.clear.oa.base.BaseDao; 4 import cn.clear.oa.domain.Role; 5 6 public interface RoleDao extends BaseDao<Role>{ 7 8 }
RoleDaoImpl.java
1 package cn.clear.oa.dao.impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import cn.clear.oa.base.BaseDaoImpl; 6 import cn.clear.oa.dao.RoleDao; 7 import cn.clear.oa.domain.Role; 8 @Repository 9 public class RoleDaoImpl extends BaseDaoImpl<Role> implements RoleDao{ 10 11 }
4).根据结果数据写相应的jsp。
list.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags"%> 3 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 8 <title>岗位列表</title> 9 </head> 10 11 <body> 12 <s:iterator value="#roleList"> 13 <s:property value="id"/>, 14 <s:property value="name"/>, 15 <s:property value="description"/>, 16 <s:a action="role_editUI?id=%{id}">修改</s:a>; 17 <s:a action="role_delete?id=%{id}" onclick="return confirm('确定删除吗?')">删除</s:a> 18 <br> 19 </s:iterator> 20 <s:a action="role_addUI">新建</s:a> 21 </body> 22 </html>
addUI.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags"%> 3 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 8 <title>添加页面</title> 9 </head> 10 11 <body> 12 <s:form action="role_add"> 13 岗位名称:<s:textfield name="name"></s:textfield><br> 14 岗位说明:<s:textarea name="description"></s:textarea><br> 15 <s:submit value="提交"></s:submit> 16 </s:form> 17 </body> 18 </html>
editUI.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags"%> 3 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 8 <title>修改页面</title> 9 </head> 10 11 <body> 12 <s:form action="role_edit"> 13 <s:hidden name="id"></s:hidden> 14 岗位名称:<s:textfield name="name"></s:textfield><br> 15 岗位说明:<s:textarea name="description"></s:textarea><br> 16 <s:submit value="提交"></s:submit> 17 </s:form> 18 </body> 19 </html>
启动服务器,可以试试各个功能请求效果。至此,我们就完成了这个岗位管理的全部功能代码了。