day52_电力系统_角色管理
来源:互联网 发布:linux curl post 请求 编辑:程序博客网 时间:2024/06/04 19:58
项目第五天(角色管理)
1:用户、角色、权限的设计
所以项目页面的设计:使用角色查找权限和用户:
2:需要的表
3:项目中配置hibernate多对多的关系
(1)用户和角色的关系:使用hibernate
ElecUser.java
ElecUser.hbm.xml
ElecRole.java
ElecRole.hbm.xml
(2)角色和权限的关系:不使用hibernate
创建角色权限关联表
ElecRolePopedom.java
ElecRolePopedom.hbm.xml
这里大家注意:中间表要使用联合主键的方式。
4:掌握js的写法(页面复选框)
<input type=”checkbox”>
的用法,控制全选/全不选页面效果:
Js代码
//权限:全部选中/不选中function checkAllOper(oper){ $("input[type='checkbox'][name='selectoper']").attr("checked",oper.checked);}//选中复选框,触发事件function goSelect(id){ //按照_符号分隔 var array = id.split("_"); if(array[0] == array[1]){//此时说明操作的(父)节点 //选中父 if($("#"+id)[0].checked){ //子都选中 $("input[type='checkbox'][name='selectoper'][id^='"+array[0]+"']").attr("checked",true); } //取消父 else{ //子都取消 $("input[type='checkbox'][name='selectoper'][id^='"+array[0]+"']").attr("checked",false); } } else{//说明此时操作的子设置中的一个(子) //当选中子设置中的一个,则父一定被选中 if($("#"+id)[0].checked){$("input[type='checkbox'][name='selectoper'][id^='"+array[0]+"'][id$='"+array[0]+"']").attr("checked",true); } //当取消子设置中的一个 else{ //先查找子设置的对象 var $check = $("input[type='checkbox'][name='selectoper'][id^='"+array[0]+"']:not([id$='"+array[0]+"'])"); //遍历子设置的对象 /** * flag:用于判断当前子设置的对象是否有被选中 * * flag=false,子对象都没有被选中,此时父要被取消 * * flag=true,子对象中至少有一个被选中,此时不做任何操作 */ var flag = false; $check.each(function(index,domEle){ if(domEle.checked){ flag = true; return false; } }) if(!flag){ $("input[type='checkbox'][name='selectoper'][id^='"+array[0]+"'][id$='"+array[0]+"']").attr("checked",false); } } }}
Jsp代码
<table cellSpacing="0" cellPadding="0" width="90%" align="center" bgColor="#f5fafe" border="0" id="dataPopedom"> <tr> <td class="ta_01" colspan=2 align="left" width="100%" > 全选/全不选<input type="checkbox" name="selectOperAll" onclick="checkAllOper(this)"> <br> <table cellspacing="0" align="center" width="100%" cellpadding="1" rules="all" bordercolor="gray" border="1" style="BORDER-RIGHT:gray 1px solid; BORDER-TOP:gray 1px solid; BORDER-LEFT:gray 1px solid; WORD-BREAK:break-all; BORDER-BOTTOM:gray 1px solid; BORDER-COLLAPSE:collapse; BACKGROUND-COLOR:#f5fafe; WORD-WRAP:break-word"> <s:if test="#request.popedomList!=null && #request.popedomList.size()>0"> <s:set value="%{'1'}" scope="request" var="flag"></s:set> <s:iterator value="#request.popedomList" var="popedom"> <s:if test="#popedom.isParent"> <s:if test="#request.flag=='2'"> </td></tr> <s:set value="%{'1'}" scope="request" var="flag"></s:set> </s:if> <tr onmouseover="this.style.backgroundColor = 'white'" onmouseout="this.style.backgroundColor = '#F5FAFE';"> <td class="ta_01" align="left" width="18%" height="22" background="../images/tablehead.jpg" > <s:if test="#popedom.flag==1"> <input type="checkbox" name="selectoper" id="<s:property value="#popedom.mid"/>_<s:property value="#popedom.mid"/>" value="<s:property value="#popedom.pid"/>_<s:property value="#popedom.mid"/>" onClick='goSelect(this.id)' checked="checked"> </s:if> <s:else> <input type="checkbox" name="selectoper" id="<s:property value="#popedom.mid"/>_<s:property value="#popedom.mid"/>" value="<s:property value="#popedom.pid"/>_<s:property value="#popedom.mid"/>" onClick='goSelect(this.id)' > </s:else> <s:property value="#popedom.name"/>: </td> </s:if> <s:else> <s:if test="#request.flag=='1'"> <td class="ta_01" align="left" width="82%" height="22"> s:set value="%{'2'}" scope="request" var="flag"></s:set> </s:if> <div> <s:if test="#popedom.flag==1"> <input type="checkbox" name="selectoper" id="<s:property value="#popedom.pid"/>_<s:property value="#popedom.mid"/>" value="<s:property value="#popedom.pid"/>_<s:property value="#popedom.mid"/>" onClick='goSelect(this.id)' checked="checked"> </s:if> <s:else> <input type="checkbox" name="selectoper" id="<s:property value="#popedom.pid"/>_<s:property value="#popedom.mid"/>" value="<s:property value="#popedom.pid"/>_<s:property value="#popedom.mid"/>" onClick='goSelect(this.id)' > </s:else> <s:property value="#popedom.name"/> </div> </s:else> </s:iterator></td></tr> </s:if> </table> </td> </tr> <input type="hidden" name="roleID" > </table>
在使用<input type=”checkbox”>
标签进行保存的时候,后台获取页面选中复
选框value的属性值,此时是一个String类型的数组对象,可以采用遍历数组的方式,保存数据。
5:多对多级联删除中间表的数据
问题:
如果用户分配了角色,那么删除用户的时候就会
抛出异常:
这里多对多的配置,能不能使用级联删除呢?回家试试:
在ElecUser.hbm.xml中定义:
<set name="elecRoles" table="elec_user_role" inverse="true" cascade="delete"> <key> <column name="userID"></column> </key> <many-to-many class="cn.itcast.elec.domain.ElecRole" column="roleID"/></set>
效果:的确中间表elec_user_role的数据可以删除,但是角色表中数据也会被删除,这样显然是不合理的。
由于在ElecUser.hbm.xml中设置:inverse=”true”
说明,由角色一端负责维护关联关系:也就是说角色可以操作用户,用户不能操作角色。
目的:删除用户表的同时,需要删除中间表的数据。此时需要修改删除用户的方法。
6:需要掌握的知识点总结
重点:角色管理的开发,多和多的关联关系(使用hibernate,不使用hibernate)
0 0
- day52_电力系统_角色管理
- day51_电力系统_用户管理
- 权限角色管理模块_界面
- 电力系统
- 电力系统
- 角色管理
- 角色管理
- 角色管理
- 角色管理
- 管理角色与执行角色
- 权限角色管理模块
- 权限角色管理模块
- asp.net20 角色管理
- 动态角色管理实现
- 权限角色管理模块
- 用户角色管理
- 角色管理常用语句
- form 身份验证 角色管理
- OpenCV直方图用法示例
- Android Studio如何选择查看指定进程的log?
- 关于Disconf配置文件下载位置的问题
- 用虚拟机搭建web服务器,在局域网内访问的实现
- Docker学习之路
- day52_电力系统_角色管理
- 一看你就懂,超详细java中的ClassLoader详解
- day1:前端学习视频笔记
- 缓存更新的套路
- 生成全排列(STL、dfs)
- 代码重构原则
- [LeetCode]224. Basic Calculator
- 浅谈对主成分分析(PCA)算法的理解
- Android studio开发 java.lang.IllegalArgumentException: already added:解决