本人最近在做项目的时候做多显框回显的时候发现了一些问题,在这里简单说一下,希望大家能受用
三表多对多 role角色表 role_auth中间表 auth权限表
在list页面 点击授权按钮带role的id 跳转controller分支
<input type="button" value="授权" "sq(${r.rid})">
<script type="text/javascript">
function sq(rid){
location="<%=path%>/getalistByRid.do?rid="+rid;
}
</script>
进入controller 根据role的id找到对应的权限
@RequestMapping("getalistByRid.do")
public String getalistByRid(Integer rid, Model model) {
//同时进入list页面 list表跟多显框同时显示
List list = rs.list();
model.addAttribute("list", list);
//查询所有的权限
List list2 = rs.selAuth();
model.addAttribute("list2", list2);
//根据role的rid找到匹配的权限
//在这里着重说一下 List的泛型很重要 如果不写 默认是object
List<Role> alist = rs.getalistByRid(rid); //最外层Role
List<Auth> getaList = alist.get(0).getaList();//里层是匹配的权限集合
//因为Role中只有一个元素 所以用alist.get(0) 继续.getaList()才能得到 有点麻烦 所以一定要仔细审题
//下面是遍历权限集合的过程 在本题中用不到 只是看一下
for (Auth auth : getaList) {
System.out.println(auth);
System.out.println(auth.getAid());
}
model.addAttribute("getaList", getaList);
return "list";
}
接下来是mapper.xml中的sql语句
1.是通过三表联查 根据角色的rid查出匹配的权限
<select id="getalistByRid" resultMap="rMap" parameterType="int">
select b.* from (select * from t_role_auth where rid = #{rid}) a left join t_auth b on a.aid = b.aid
</select>
2.是查出所有的权限
<select id="selAuth" resultType="Auth">
select * from t_auth
</select>
最后通过Model传回list页面
在外层先遍历所有的权限
<c:forEach items="${list2 }" var="a">
//复选框 在复选框中遍历role的rid匹配的权限
<input type="checkbox" name="checkOne" value="${a.aid }"
<c:forEach items="${getaList }" var="g">
//如果role的id匹配权限的id 那么就checked
${a.aid==g.aid?'checked':'' }
</c:forEach>
>${a.aname }<br>
</c:forEach>