实现复选框选择的功能

2015年4月9日 天气冷
这里以“用户授权”为例说明

实现方法一(适合弹出modal的场景):

后台代码如下:
/**
 * 用户授权
 * */
public String authorization() throws Exception {
    //action为0代表请求授权页面,action为1代表需要更新数据到数据库
    if (getAction().equals("0")) {
        user = userService.get(userId);
        //获得用户所有权限
        allRoleList = roleService.getAllRole();
        //获得用户已有权限
        Set<Role> userRoleList = user.getRoles();
        //循环所有权限,如果用户已经选中,则标记,前台显示打钩
        outer: for (Role userRole : userRoleList) {
            inner: for (Role allRole : allRoleList) {
                if (userRole.getRoleId().equals(allRole.getRoleId())) {
                    allRole.setIsCheck(1);
                    break inner;
                }
            }
        }
        return ROLE;
    } else {
        userService.authorization(userId, roles);
        setPageData();
        return SUCCESS;
    }
}

这段代码的大体意思是:在用户所有权限中,通过用户已有的权限与用户所有权限比较,将已有的权限在用户所有权限中做了一个标记isCheck(1),所以在界面前端就可以通过如下的代码实现勾选的动作了

前端代码如下:
<!-- 如果用户已经赋予权限,进来的时候权限要勾上 -->
<c:forEach items="${requestScope.allRoleList}" var="role">
      <c:choose>
           <c:when test="${role.isCheck == 1}">
                <input  type="checkbox" name="roles" value="${role.roleId}" checked="checked">${role.roleName}
           </c:when>
            <c:otherwise>
                 <input type="checkbox" name="roles" value="${role.roleId}">${role.roleName}
             </c:otherwise>
       </c:choose>
</c:forEach>

需要注意的地方是遇到json中要放一个对象及ArrayList的时候,可以把该对象及ArrayList放到一个Map中,由Map同一输出
当然有的同学会说,我不在后台在标记,直接在前端做可以吗。那当然可以,于是就有了第二种做法

实现方法二(适合于从一个跳转到另一个界面的场景,包括dialog中页面的跳转):

<c:choose>
    <c:when test="${not empty customerIdsMap}">
        <input type="checkbox" name="ids" value="${proposer.id}" 
        <c:forEach items="${customerIdsMap}" var="cid">
            <c:if test="${cid == proposer.id}">
                checked="checked"
            </c:if>
        </c:forEach>
        />${proposer.trueName}
    </c:when>

    <c:otherwise>
        <input type="checkbox" name="ids" value="${proposer.id}" />${proposer.trueName}
    </c:otherwise>
</c:choose>

不过这个实现需要在后台分别返回customerIdsMap及proposer的对象,这两个对象一定要在同一域中,比如Json和request交叉混合就不行。因为request中的对象容易刷新丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值