在JSF dataTable中实现selecteBooleanCheckbox全选效果.

前端页面部分代码:

 

<h:commandLink action="#{ADManagementAuditListPMG.disAndselectAll(true)}" value="全部选中"/>    
            <h:commandLink action="#{ADManagementAuditListPMG.disAndselectAll(false)}" value="全部取消"/>   
  
<h:dataTable var="manager" value="#{ADManagementAuditListPMG.dataModel}">   
                    <h:column>   
                        <f:facet name="header"><h:outputText value="选择" /></f:facet>   
                        <h:selectBooleanCheckbox value="#{manager.selected}" disabled="#{!RenderController.av.getAccessRight('PassButton',row.userid)}"  id="id#{manager.selected}">   
                            <f:ajax event="change" listener="#{manager.updateSelected}"/>//自定义选择时使用ajax更新selected状态   
                        </h:selectBooleanCheckbox>   
                    </h:column>   
</h:dataTable>  

 

ManagerBean中的全选方法:

public void disAndselectAll(boolean selected) {   
                List<MemberDataAuditDTO> userList = (List<MemberDataAuditDTO>) dataModel.getWrappedData();   
                for (MemberDataAuditDTO user : userList) {   
                        user.setSelected(selected);   
                }   
 }  
 

 

MemberDataAuditDTO中部分代码:

public class MemberDataAuditDTO implements Serializable {   
  
    private static final long serialVersionUID = 1L;   
       
    private boolean selected;   
  
    public MemberDataAuditDTO() {   
    }   
  
    public boolean getSelected() {   
        return selected;   
    }   
  
    public void setSelected(boolean selected) {   
        this.selected = selected;   
    }   
    //ajax调用该方法更新selected状态   
    public void updateSelected(){   
        System.out.println("selected"+selected);   
         if(!selected){   
            selected = true;   
         }else{;   
         }   
    }  

 

以上全选、多选实现使用了纯JSF技术,经过两天的验证发现点问题,以及可以简化的解决方法。

问题:因为复选框使用了权限设置,没有权限的用户登录复选框置灰,不能选择,但使用JSF全选的方法,

disable=true,复选框置灰只是显示而已,全选依然能够选中该复选框,也就是说失去了权限设置的意

义。

修改后的代码如下:

全选JS代码

 

/**  
 * 复选框全选/全部取消对应的JS方法  
 * @param formName 表单名称,  
 * @param dtName dataTable名称,  
 * @param checked 是否选中,true为选中,false为取消  
 */  
function SetCheckedStatus(formName,dtName,checked)   
{   
    var oTableName = formName+':'+dtName;   
    var oTable=document.getElementById(oTableName);   
    if(oTable != null)   
    {   
        for(j=1;j<oTable.rows.length;j++)   
        {   
            oTable.rows[j].cells[0].childNodes[0].checked=checked;//选中复选框   
            oTable.rows[j].cells[0].childNodes[0].onchange();//触发复选框中onchange事件,进行状态的提交   
        }   
    }   
}  

 

 

JSF代码:

<a href="#" mce_href="#" οnclick="SetCheckedStatus('form1','dt1',true);">全部选中</a>   
            <a href="#" mce_href="#" οnclick="SetCheckedStatus('form1','dt1',false);">全部取消</a>   
  
<h:dataTable id="dt1" var="manager" value="#{ADManagementAuditListPMG.dataModel}">   
                    <h:column>   
                        <f:facet name="header"><h:outputText value="选择" /></f:facet>   
                        <h:selectBooleanCheckbox value="#{manager.selected}"  disabled="#{!RenderController.av.getAccessRight('PassButton',row.userid)}"  οnchange="submit();">   
                        </h:selectBooleanCheckbox>   
                    </h:column>  

 

 

此方法只需在DTO中建立相应的 boolean selected; 字段即可。

public class MemberDataAuditDTO implements Serializable {   
  
    private static final long serialVersionUID = 1L;   
       
    private boolean selected;   
  
    public MemberDataAuditDTO() {   
    }   
  
    public boolean getSelected() {   
        return selected;   
    }   
  
    public void setSelected(boolean selected) {   
        this.selected = selected;   
    }   
}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qiao000_000/archive/2010/03/24/5411728.aspx#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值