1 <s:a action="role_setPrivilegeUI?id=%{id}" namespace="/">设置权限</s:a>

2 //1 根据id查询当前要设置的角色,用于回显
  Role role = roleService.getById(model.getId());
  getValueStack().push(role);

 

//2 查询所有权限数据,在页面展示
//List<Privilege> privilegeList = privilegeService.findAll();
List<Privilege> privilegeList = privilegeService.findTopList();//查询顶级权限
getValueStack().set("privilegeList", privilegeList);


//3 查询当前角色对应的权限,用于页面回显
Set<Privilege> privileges = role.getPrivileges();
if(privileges != null && privileges.size() > 0){ 

privilegeIds = new Long[privileges.size()];
int index = 0;
for(Privilege p : privileges){
privilegeIds[index++] = p.getId();
}
}

return "setPrivilegeUI";

//4

<result name="setPrivilegeUI">/WEB-INF/jsp/role/setPrivilegeUI.jsp</result>

 

 

<s:iterator value="privilegeList">
<li>
<input id="cb_${id }"
<s:property value="id in privilegeIds ? 'checked' : '' "/>
value="${id }" type="checkbox" name="privilegeIds">
<label for='cb_${id }'><span class='folder' id='${id }'>${name }</span></label>

<ul>
<s:iterator value="children">
<li>
<input id="cb_${id }"
<s:property value="id in privilegeIds ? 'checked' : '' "/>
value="${id }" type="checkbox" name="privilegeIds">
<label for='cb_${id }'><span class='folder' id='${id }'>${name }</span></label>
<ul>
<s:iterator value="children">
<li>
<input id="cb_${id }"
<s:property value="id in privilegeIds ? 'checked' : '' "/>
value="${id }" type="checkbox" name="privilegeIds">
<label for='cb_${id }'><span class='folder' id='${id }'>${name }</span></label>
</li>
</s:iterator>
</ul>

</li>
</s:iterator>
</ul>
</li>
</s:iterator>

/**
* 为角色设置权限
*/
public String setPrivilege(){
//先查询,再修改
Role role = roleService.getById(model.getId());

if(privilegeIds != null && privilegeIds.length > 0){
//如果权限id数组不为空,就根据权限id数组查询对应的多个权限
List<Privilege> priviList = privilegeService.getByIds(privilegeIds);
role.setPrivileges(new HashSet<Privilege>(priviList));
}else{
//如果没有设置任何权限,就清空角色对应的权限
role.setPrivileges(null);
}

roleService.update(role);

return "toList";
}