首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。
上一节将系统管理的岗位管理的代码写完了,但仍有一些代码是可以简化的。那么下面就来简化一下。
一 简化:RoleAction.java,使用Struts2提供的ModelDriven来简化model的代码,就不用写属性写set与get方法了。简化后内容如下:
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 import com.opensymphony.xwork2.ModelDriven; 16 17 @Controller 18 @Scope("prototype") 19 public class RoleAction extends ActionSupport implements ModelDriven<Role>{ 20 21 /** 22 * 23 */ 24 private static final long serialVersionUID = 1L; 25 26 27 @Resource 28 private RoleService roleService; 29 30 31 private Role role = new Role(); 32 33 public Role getModel() { 34 35 return role; 36 } 37 38 /**显示列表*/ 39 public String list() throws Exception { 40 List<Role> roleList = roleService.findAll(); 41 ActionContext.getContext().put("roleList", roleList); 42 return "list"; 43 } 44 /**添加页面*/ 45 public String addUI() throws Exception { 46 47 return "addUI"; 48 } 49 /**添加*/ 50 public String add() throws Exception { 51 //封装数据到对象 52 //Role role = new Role(); 53 //role.setName(name); 54 //role.setDescription(description); 55 //将对象保存到数据库 56 roleService.save(role); 57 return "toList"; 58 } 59 /**修改页面*/ 60 public String editUI() throws Exception { 61 //准备回显数据 62 Role roles = roleService.findById(role.getId()); 63 //将对象的值放在栈顶 64 ActionContext.getContext().getValueStack().push(roles); 65 return "editUI"; 66 } 67 /**修改*/ 68 public String edit() throws Exception { 69 //拿到准备好修改的对象 70 Role roles = roleService.findById(role.getId()); 71 //设置要修改的属性 72 roles.setName(role.getName()); 73 roles.setDescription(role.getDescription()); 74 //将对象持久化到数据库 75 roleService.update(roles); 76 return "toList"; 77 } 78 /**删除*/ 79 public String delete() throws Exception { 80 roleService.delete(role.getId()); 81 return "toList"; 82 } 83 84 }
二 简化list.jsp的代码(属性可以用EL表达式),简化后的代码内容如下:
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 ${id}, 14 ${name}, 15 ${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>
三 前台页面修改。我们已经提供了一套前台的样式,所以直接套用,增强可视效果,具体结果显示如下图:
四 经测试,Struts2版本高于2.1如果照我们的Action写法,后台会报错,因为外面的action里已经不写get set方法,
导致找不到相关方法。这时根据错误提示将开发者模式设为false,问题解决。
五 addUI.jsp页面与editUI.jsp页面,合并成为saveUI.jsp,这样可以减少一个页面的代码量。合并后的saveUI.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 <title>保存岗位</title> 8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 9 <script language="javascript" src="${pageContext.request.contextPath}/script/jquery.js"></script> 10 <script language="javascript" src="${pageContext.request.contextPath}/script/pageCommon.js" charset="utf-8"></script> 11 <script language="javascript" src="${pageContext.request.contextPath}/script/PageUtils.js" charset="utf-8"></script> 12 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/pageCommon.css" /> 13 <script type="text/javascript"> 14 </script> 15 </head> 16 <body> 17 18 <!-- 标题显示 --> 19 <div id="Title_bar"> 20 <div id="Title_bar_Head"> 21 <div id="Title_Head"></div> 22 <div id="Title"><!--页面标题--> 23 <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 岗位设置 24 </div> 25 <div id="Title_End"></div> 26 </div> 27 </div> 28 29 <!--显示表单内容--> 30 <div id="MainArea"> 31 <s:form action="role_%{id == null ? 'add' : 'edit'}"> 32 <div class="ItemBlock_Title1"><!-- 信息说明<DIV CLASS="ItemBlock_Title1"> 33 <IMG BORDER="0" WIDTH="4" HEIGHT="7" SRC="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 岗位信息 </DIV> --> 34 </div> 35 <!-- 表单内容显示 --> 36 <s:hidden name="id"></s:hidden> 37 <div class="ItemBlockBorder"> 38 <div class="ItemBlock"> 39 <table cellpadding="0" cellspacing="0" class="mainForm"> 40 <tr> 41 <td width="100">岗位名称</td> 42 <td><s:textfield name="name" cssClass="InputStyle" /> *</td> 43 </tr> 44 <tr> 45 <td>岗位说明</td> 46 <td><s:textarea name="description" cssClass="TextareaStyle"></s:textarea></td> 47 </tr> 48 </table> 49 </div> 50 </div> 51 52 <!-- 表单操作 --> 53 <div id="InputDetailBar"> 54 <input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/> 55 <a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a> 56 </div> 57 </s:form> 58 </div> 59 60 </body> 61 </html>
重点行:<s:form action="role_%{id == null ? 'add' : 'edit'}">。
同样,RoleAction.java里的addUI(),editUI()的返回值改为saveUI,struts.xml的result也修改为如下:
<result name="saveUI">/WEB-INF/jsp/roleAction/saveUI.jsp</result>。
至此,我们的岗位管理功能就全部完成实现了。
附页面源码下载地址:http://pan.baidu.com/s/1kTHs199