效果如下:
实现方式:
在权限对象中加入一个标识属性,例如:
@Transient private Integer isCheck; // 是否选中,就为了不用Spring标签,我容易么. 0为未选中 public AdminPermission() { isCheck = 0; }
通过构造函数,为其设置默认值。
在相关的Service中,用全部权限和角色拥有的权限作对比,如下:
public List<AdminPermission> findAdminHasPermissonsByRoleId(String strId) { AdminRole adminRole = findAdminRoleById(strId); // 应该被选中的权限 List<AdminPermission> shouldCheckPermisson = rolePermissonService .findRoleHasPermissons(adminRole.getStrId()); // 所有权限 List<AdminPermission> allPermisson = permissonService .findAdminPermissons(); for (AdminPermission has : shouldCheckPermisson) { //如果全部权限中包含角色拥有的这个权限 if (allPermisson.contains(has)) { //获得这个权限的位置 int index = allPermisson.indexOf(has); //通过位置,获取到这个权限,将其未改为非0值 allPermisson.get(index).setIsCheck(1); } } return allPermisson; }
页面中,使用jstl取出,如下:
<c:forEach items="${permissons }" var="permisson"> <input type="checkbox" <c:if test="${permisson.isCheck!=0}">checked="checked"</c:if> name="permissonid" value="${permisson.strId }">${permisson.strPermissionName } </c:forEach>