首页 > 代码库 > OA项目12:系统管理之用户管理
OA项目12:系统管理之用户管理
首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。
一 之前在第8节时已经将User实体及映射文件建立好了,所以设计实体已经完成了,下面来做功能了。
二 我们对照静态页面看用户管理页面分析发现,增删改查功能跟之前一样,多了一个初始化密码的请求。当然,这不是问题,下面开始做功能吧!
三 开发:
1.写action及struts2映射,具体如下:
1)UserAction.java:
1 package cn.clear.oa.view.action; 2 3 import java.util.HashSet; 4 import java.util.List; 5 6 import org.springframework.context.annotation.Scope; 7 import org.springframework.stereotype.Controller; 8 9 import com.opensymphony.xwork2.ActionContext; 10 11 import cn.clear.oa.base.BaseAction; 12 import cn.clear.oa.domain.Department; 13 import cn.clear.oa.domain.Role; 14 import cn.clear.oa.domain.User; 15 import cn.clear.oa.util.DepartmentUtil; 16 17 @Controller 18 @Scope("prototype") 19 public class UserAction extends BaseAction<User> { 20 21 /** 22 * 23 */ 24 private static final long serialVersionUID = 1L; 25 26 private Long departmentId; 27 private Long[] roleIds; 28 29 public String list() throws Exception { 30 // 查询所有的用户 31 List<User> userList = userService.findAll(); 32 // 将用户放集合 33 ActionContext.getContext().put("userList", userList); 34 return "list"; 35 } 36 37 public String delete() throws Exception { 38 userService.delete(model.getId()); 39 return "toList"; 40 } 41 42 public String addUI() throws Exception { 43 // 准备部门树状列表 44 List<Department> topList = departmentService.findTopList(); 45 List<Department> departmentList = DepartmentUtil 46 .getAllDepartments(topList); 47 48 ActionContext.getContext().put("departmentList", departmentList); 49 // 准备roleList 50 List<Role> roleList = roleService.findAll(); 51 ActionContext.getContext().put("roleList", roleList); 52 return "saveUI"; 53 } 54 55 public String add() throws Exception { 56 // 设置部门 57 model.setDepartment(departmentService.findById(departmentId)); 58 // 设置岗位 59 model.setRoles(new HashSet<Role>(roleService.findByIds(roleIds))); 60 // 设置密码 61 model.setPassword("1234"); 62 userService.save(model); 63 return "toList"; 64 } 65 66 public String editUI() throws Exception { 67 // 准备部门树状列表 68 List<Department> topList = departmentService.findTopList(); 69 List<Department> departmentList = DepartmentUtil 70 .getAllDepartments(topList); 71 72 ActionContext.getContext().put("departmentList", departmentList); 73 // 准备roleList 74 List<Role> roleList = roleService.findAll(); 75 ActionContext.getContext().put("roleList", roleList); 76 77 // 准备回显的数据 78 User user = userService.findById(model.getId()); 79 // 放在栈顶 80 ActionContext.getContext().getValueStack().push(user); 81 //部门回显 82 if(user.getDepartment()!=null){ 83 departmentId = user.getDepartment().getId(); 84 } 85 //岗位回显 86 if(user.getRoles()!=null){ 87 roleIds = new Long[user.getRoles().size()]; 88 int index = 0; 89 for (Role role : user.getRoles()) { 90 roleIds[index++] = role.getId(); 91 } 92 } 93 return "saveUI"; 94 } 95 96 public String edit() throws Exception { 97 User user = userService.findById(model.getId()); 98 user.setDescription(model.getDescription()); 99 user.setEmail(model.getEmail());100 user.setGender(model.getGender());101 user.setLoginName(model.getLoginName());102 user.setName(model.getName());103 user.setPhoneNumber(model.getPhoneNumber());104 105 List<Role> roleList = roleService.findByIds(roleIds);106 user.setRoles(new HashSet<Role>(roleList));107 user.setDepartment(departmentService.findById(departmentId));108 userService.update(user);109 return "toList";110 }111 112 public String initPassword() throws Exception {113 User user = userService.findById(model.getId());114 user.setPassword("1234");115 userService.update(user);116 return "toList";117 }118 119 // ------120 public Long getDepartmentId() {121 return departmentId;122 }123 124 public void setDepartmentId(Long departmentId) {125 this.departmentId = departmentId;126 }127 128 public Long[] getRoleIds() {129 return roleIds;130 }131 132 public void setRoleIds(Long[] roleIds) {133 this.roleIds = roleIds;134 }135 136 }
2)在struts.xml中添加映射:
1 <!-- 用户管理 -->2 <action name="user_*" class="userAction" method="{1}">3 <result name="list">/WEB-INF/jsp/userAction/list.jsp</result>4 <result name="toList" type="redirectAction">user_list</result>5 <result name="saveUI">/WEB-INF/jsp/userAction/saveUI.jsp</result>6 7 </action>
2.写Service及实现类:
1)UserService.java
1 package cn.clear.oa.service;2 3 import cn.clear.oa.base.DaoSupport;4 import cn.clear.oa.domain.User;5 6 public interface UserService extends DaoSupport<User>{7 8 }
2)UserServiceImpl.java
1 package cn.clear.oa.service.impl; 2 3 import org.springframework.stereotype.Service; 4 5 import cn.clear.oa.base.DaoSupportImpl; 6 import cn.clear.oa.domain.User; 7 import cn.clear.oa.service.UserService; 8 9 @Service10 public class UserServiceImpl extends DaoSupportImpl<User> implements UserService{11 12 }
3)在BaseAction.java中声明userService,如下:
@Resource
protected UserService userService;
3.写jsp页面:
1)list.jsp:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <title>用户列表</title> 7 <%@ include file="/WEB-INF/jsp/public/commons.jspf" %> 8 </head> 9 <body>10 11 <div id="Title_bar">12 <div id="Title_bar_Head"> 13 <div id="Title_Head"></div>14 <div id="Title"><!--页面标题-->15 <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 用户管理16 </div>17 <div id="Title_End"></div>18 </div>19 </div>20 21 <div id="MainArea">22 <table cellspacing="0" cellpadding="0" class="TableStyle">23 24 <!-- 表头-->25 <thead>26 <tr align=center valign=middle id=TableTitle>27 <td width="100">登录名</td>28 <td width="100">姓名</td>29 <td width="100">所属部门</td>30 <td width="200">岗位</td>31 <td>备注</td>32 <td>相关操作</td>33 </tr>34 </thead>35 36 <!--显示数据列表-->37 <tbody id="TableData" class="dataContainer" datakey="userList">38 <s:iterator value="#userList">39 <tr class="TableDetail1 template">40 <td>${loginName} </td>41 <td>${name} </td>42 <td>${department.name} </td>43 <td>44 <s:iterator value="#roles">45 ${name} 46 </s:iterator>47 </td>48 <td>${description} </td>49 <td><s:a onClick="return confirm(‘确定删除该用户吗?‘)" action="user_delete?id=%{id}">删除</s:a>50 <s:a action="user_editUI?id=%{id}">修改</s:a>51 <s:a action="user_initPassword?id=%{id}" onClick="return confirm(‘您确定要初始化密码为1234吗?‘)">初始化密码</s:a>52 </td>53 </tr>54 </s:iterator> 55 </tbody>56 </table>57 58 <!-- 其他功能超链接 -->59 <div id="TableTail">60 <div id="TableTail_inside">61 <s:a action="user_addUI"><img src="${pageContext.request.contextPath}/style/images/createNew.png" /></s:a>62 </div>63 </div>64 </div>65 66 </body>67 </html>
2)saveUI.jsp:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 5 <html> 6 <head> 7 <title>用户信息</title> 8 <%@ include file="/WEB-INF/jsp/public/commons.jspf" %> 9 </head> 10 <body> 11 12 <!-- 标题显示 --> 13 <div id="Title_bar"> 14 <div id="Title_bar_Head"> 15 <div id="Title_Head"></div> 16 <div id="Title"><!--页面标题--> 17 <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 用户信息 18 </div> 19 <div id="Title_End"></div> 20 </div> 21 </div> 22 23 <!--显示表单内容--> 24 <div id=MainArea> 25 <s:form action="user_%{id == null ? ‘add‘:‘edit‘ }"> 26 <div class="ItemBlock_Title1"><!-- 信息说明 --><div class="ItemBlock_Title1"> 27 <img border="0" width="4" height="7" src="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 用户信息 </div> 28 </div> 29 <!-- 表单内容显示 --> 30 <s:hidden name="id"></s:hidden> 31 <div class="ItemBlockBorder"> 32 <div class="ItemBlock"> 33 <table cellpadding="0" cellspacing="0" class="mainForm"> 34 <tr><td width="100">所属部门</td> 35 <td><s:select name="departmentId" list="#departmentList" cssClass="SelectStyle" listKey="id" listValue="name" 36 headerKey="" headerValue="==请选择部门=="></s:select> 37 </td> 38 </tr> 39 <tr><td>登录名</td> 40 <td><s:textfield name="loginName" cssClass="InputStyle"></s:textfield> * 41 (登录名要唯一) 42 </td> 43 </tr> 44 <tr><td>姓名</td> 45 <td><s:textfield name="name" cssClass="InputStyle"/> *</td> 46 </tr> 47 <tr><td>性别</td> 48 <td> 49 <s:radio name="gender" list="{‘男‘,‘女‘}"> 50 </s:radio> 51 </td> 52 </tr> 53 <tr><td>联系电话</td> 54 <td><s:textfield name="phoneNumber" cssClass="InputStyle"/></td> 55 </tr> 56 <tr><td>E-mail</td> 57 <td><s:textfield name="email" cssClass="InputStyle"/></td> 58 </tr> 59 <tr><td>备注</td> 60 <td><s:textarea name="description" cssClass="TextareaStyle"></s:textarea></td> 61 </tr> 62 </table> 63 </div> 64 </div> 65 66 <div class="ItemBlock_Title1"><!-- 信息说明 --><div class="ItemBlock_Title1"> 67 <img border="0" width="4" height="7" src="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 岗位设置 </div> 68 </div> 69 70 <!-- 表单内容显示 --> 71 <div class="ItemBlockBorder"> 72 <div class="ItemBlock"> 73 <table cellpadding="0" cellspacing="0" class="mainForm"> 74 <tr> 75 <td width="100">岗位</td> 76 <td><s:select name="roleIds" multiple="true" size="10" 77 list="#roleList" cssClass="SelectStyle" listKey="id" listValue="name"></s:select> 78 按住Ctrl键可以多选或取消选择 79 </td> 80 </tr> 81 </table> 82 </div> 83 </div> 84 85 <!-- 表单操作 --> 86 <div id="InputDetailBar"> 87 <input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/> 88 <a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a> 89 </div> 90 </s:form> 91 </div> 92 93 <div class="Description"> 94 说明:<br /> 95 1,用户的登录名要唯一,在填写时要同时检测是否可用。<br /> 96 2,新建用户后,密码被初始化为"1234"。<br /> 97 3,密码在数据库中存储的是MD5摘要(不是存储明文密码)。<br /> 98 4,用户登录系统后可以使用“个人设置→修改密码”功能修改密码。<br /> 99 5,新建用户后,会自动指定默认的头像。用户可以使用“个人设置→个人信息”功能修改自已的头像<br />100 6,修改用户信息时,登录名不可修改。101 </div>102 103 </body>104 </html>
3)在测试时发现roles显示有问题,经检查在外面之前写代码时发现问题,问题是在DaoSupportImpl.java中findByIds()方法这句:
return getSession().createQuery(//
"FROM "+clazz.getSimpleName()+" WHERE id IN(:ids)")//
.setParameter("ids", ids)//
.list()的setParameter有误,因为是集合所以修改后为:
return getSession().createQuery(//
"FROM "+clazz.getSimpleName()+" WHERE id IN(:ids)")//
.setParameterList("ids", ids)//
.list()。
以上就是用户管理的基本实现,关于在saveUI页面下角的要求将在下节实现。
OA项目12:系统管理之用户管理