首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。
一 写PrivilegeService.java及实现类PrivilegeServiceImpl.java:
1 package cn.clear.oa.service; 2 3 import cn.clear.oa.base.DaoSupport; 4 import cn.clear.oa.domain.Privilege; 5 6 public interface PrivilegeService extends DaoSupport<Privilege>{ 7 8 }
PrivilegeService.java
1 package cn.clear.oa.service.impl; 2 3 import org.springframework.stereotype.Service; 4 import org.springframework.transaction.annotation.Transactional; 5 6 import cn.clear.oa.base.DaoSupportImpl; 7 import cn.clear.oa.domain.Privilege; 8 import cn.clear.oa.service.PrivilegeService; 9 10 @Service 11 @Transactional 12 public class PrivilegeServiceImpl extends DaoSupportImpl<Privilege> implements PrivilegeService{ 13 14 }
PrivilegeServiceImpl.java
二 在BaseAcion.java中将Service注入,以便在Action中可以直接使用:
@Resource
protected PrivilegeService privilegeService;
三 在RoleAction.java中添加属性方法:
1.增加权限id数组privilegeIds属性和get,set方法,下面要用到:
private Long[] privilegeIds;
public Long[] getPrivilegeIds() {
return privilegeIds;
}
public void setPrivilegeIds(Long[] privilegeIds) {
this.privilegeIds = privilegeIds;
}
2.新增设置权限页面和设置权限的action方法,如下:
/**设置权限页面*/
public String setPrivilegeUI() throws Exception {
//准备回显数据
Role role = roleService.findById(model.getId());
//将对象的值放在栈顶
ActionContext.getContext().getValueStack().push(role);
if(role.getPrivileges() != null){
privilegeIds = new Long[role.getPrivileges().size()];
int index = 0;
for (Privilege privilege : role.getPrivileges()) {
privilegeIds[index++] = privilege.getId();
}
}
//准备数据privilegeList
List<Privilege> privilegeList = privilegeService.findAll();
ActionContext.getContext().put("privilegeList", privilegeList);
return "setPrivilegeUI";
}
/**设置权限*/
public String setPrivilege() throws Exception {
//拿到准备好修改的对象
Role roles = roleService.findById(model.getId());
//设置要修改的属性
List<Privilege> privileges = privilegeService.findByIds(privilegeIds);
roles.setPrivileges(new HashSet<Privilege>(privileges));
//将对象持久化到数据库
roleService.update(roles);
return "toList";
}
3.在struts.xml中增加的岗位action映射中增加设置权限的result属性,如下:
<result name="setPrivilegeUI">/WEB-INF/jsp/roleAction/setPrivilegeUI.jsp</result>
4.在roleAction的list.jsp页面中修改设置权限的按钮指向地址,如下:
<s:a action="role_setPrivilegeUI?id=%{id}">设置权限</s:a>
5.写setPrivilegeUI.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 <script language="javascript" src="${pageContext.request.contextPath}/script/jquery_treeview/jquery.treeview.js"></script> 9 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/file.css" /> 10 <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/script/jquery_treeview/jquery.treeview.css" /> 11 12 </head> 13 <body> 14 15 <!-- 标题显示 --> 16 <div id="Title_bar"> 17 <div id="Title_bar_Head"> 18 <div id="Title_Head"></div> 19 <div id="Title"><!--页面标题--> 20 <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 配置权限 21 </div> 22 <div id="Title_End"></div> 23 </div> 24 </div> 25 26 <!--显示表单内容--> 27 <div id=MainArea> 28 <s:form action="role_setPrivilege"> 29 <s:hidden name="id"></s:hidden> 30 <div class="ItemBlock_Title1"><!-- 信息说明 --><div class="ItemBlock_Title1"> 31 <img border="0" width="4" height="7" src="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 正在为【${name}】配置权限 </div> 32 </div> 33 34 <!-- 表单内容显示 --> 35 <div class="ItemBlockBorder"> 36 <div class="ItemBlock"> 37 <table cellpadding="0" cellspacing="0" class="mainForm"> 38 <!--表头--> 39 <thead> 40 <tr align="LEFT" valign="MIDDLE" id="TableTitle"> 41 <td width="300px" style="padding-left: 7px;"> 42 <!-- 如果把全选元素的id指定为selectAll,并且有函数selectAll(),就会有错。因为有一种用法:可以直接用id引用元素 --> 43 <input type="CHECKBOX" id="cbSelectAll" onClick="$(‘[name=privilegeIds]‘).attr(‘checked‘,this.checked)"/> 44 <label for="cbSelectAll">全选</label> 45 </td> 46 </tr> 47 </thead> 48 49 <!--显示数据列表--> 50 <tbody id="TableData"> 51 <tr class="TableDetail1"> 52 <!-- 显示权限树 --> 53 <td> 54 55 <s:checkboxlist name="privilegeIds" list="#privilegeList" listKey="id" listValue="name"></s:checkboxlist> 56 57 </td> 58 </tr> 59 </tbody> 60 </table> 61 </div> 62 </div> 63 64 <!-- 表单操作 --> 65 <div id="InputDetailBar"> 66 <input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/> 67 <a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a> 68 </div> 69 </s:form> 70 </div> 71 72 <div class="Description"> 73 说明:<br /> 74 1,选中一个权限时:<br /> 75 a,应该选中 他的所有直系上级。<br /> 76 b,应该选中他的所有直系下级。<br /> 77 2,取消选择一个权限时:<br /> 78 a,应该取消选择 他的所有直系下级。<br /> 79 b,如果同级的权限都是未选择状态,就应该取消选中他的直接上级,并递归向上做这个操作。<br /> 80 81 3,全选/取消全选。<br /> 82 4,默认选中当前岗位已有的权限。<br /> 83 </div> 84 85 </body> 86 </html> 87
setPrivilegeUI.jsp
四 启动服务器,打开岗位管理页面,测试设置权限功能。