发表于: 2016-12-14 23:19:13

2 2058


问君能有几多愁?恰似一江春水向东流。

今天完成的事情:

角色管理模块

角色与权限的关系:多对多

在entity实体类创建了三个类,分别是

Role(角色)   字段:id、name、status,还有一个set集合保存对应的权限。

RolePrivilegeId(角色权限的id)这个是角色和权限的中间表,字段是角色id和权限id,

RolePrivilege(角色权限)这个表只有一个字段id,因为权限的名称在一个常量类里面,因为在页面上需要显示权限的名称,作者把权限在一个类里面全部设为常量,并用一个map集合进行了封装。优点:当用到权限名称的时候直接把常量拿过来用,并做到只需要修一处控制多处的作用。当然用这些常量的时候只需要在使用的地方使用域对象设置上这个MAP集合。


*.hbm.xml里面把角色权限表的角色id和权限id设置为联合主键,所以RolePrivilegeId需要实现serializable接口和重写hashcodeequals方法。

 

这个是需求页面

学习了两个功能,新增和编辑

1.点击新增进去的页面是:

在这个地方最终可以保存用户角色和对应的权限,但是角色和权限不在一张表上,角色和权限是一种多对多的关系,此处简化为一对多,即一个角色对应多个权限。在Role(角色)的实体类里面有一个set的集合保存角色对应的权限,及其gettersetter方法。在配置文件上有role和权限id的配置:

可以进行级联保存,就是可以在一个add()方法下进行角色和权限的保存,

 

2.点击编辑进入编辑页面(对已经保存的角色进行编辑)

需要数据回显

首先还是需要把权限的集合加载过来

ActionContext.getContext().getContextMap().put("privilegeMap", Constant.PRIVILEGE_MAP);

然后是在listUI界面跳转到editUI界面时会传入roleId

      <a href="javascript:doEdit('<s:property value='roleId'/>')">编辑</a>

根据roleId得到role对象和对应权限

if (role != null && role.getRoleId() != null) {

role = roleService.findObjectById(role.getRoleId());

//处理权限回显

if(role.getRolePrivileges() != null){

privilegeIds = new String[role.getRolePrivileges().size();//这是一个数组

int i = 0;

for(RolePrivilege rp: role.getRolePrivileges()){

privilegeIds[i++] = rp.getId().getCode();

}

            }

}

 

对于我的情况来说,需要理解这些功能的流转情况,以及流转的时候需要传入哪些对象。也就是你得明白学到的技术怎么去应用。所以我把一些理解上有难度的流程贴过来了。

原来我的理解就是从列表页面跳转到编辑页面,进行数据回显再进行编辑

后来我把它想成从列表页面点击编辑按钮,会带着一个role_id(角色id)过去,数据回显会根据id来查找对应的角色还有权限

 


3.编辑完保存之后又有问题:

     如果你编辑的时候改动了权限,那么等你再看的时候改动之前的权限还是存在的,也就是你去除权限没有成功,但是添加权限却成功了。

     原因:hibernate将原有的值进行自动回填。

     解决的方法是先删除之前的权限,在更新现在的权限。但是这种方法在企业里面肯定不适用的,可以给权限设置一个标志,当权限失效的时候可以吧标志设为false这样会更好。


遇到的问题:我发现hibernate的配置文件有点不好写,还需要多看看这些东西。


明天计划的事情:我只能晚上自习一段时间,这些总结是白天挤时间写出来的。晚上继续跟进项目。


收获:

<s:checkboxlist list="#privilegeMap" name="privilegeIds"></s:checkboxlist>  这个标签可以把集合里面的元素以复选框的形式展示出来


我认为数据库的设计非常重要,感觉收获的不少,但是讲不出来

   










返回列表 返回列表
评论

    分享到