JSF的dataTable中实现多行选中(selectBooleanCheckbox)

本文介绍了一种在JSF应用中实现多行选中的方法,通过在BackingBean中使用Map来跟踪选中的项,避免了对实体类的直接修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上搜了一下,之前的人有修改实体类的,在EntityBean中加上isSelected属性.但我觉得实体类加上这一条属性只为了实现多行选中实在不妥.

后来我用了在BackingBean中加Map属性的方法来实现. 看代码:

JSF:

<h:form>
    
<h:dataTable value="#{myBean.dataList}" var="item">
        
<h:column>
            
<f:facet name="header">
                
<h:outputText value="Select" />
            
</f:facet>
            
<h:selectBooleanCheckbox value="#{myBean.selectedIds[item.id]}" />
        
</h:column>
         ...
    
</h:dataTable>
    
<h:commandButton value="Get selected items" action="#{myBean.getSelectedItems}" />
</h:form>

BackingBean:

public class MyBean {
    
private Map selectedIds = new HashMap();
    
private List selectedDataList;
    
public String getSelectedItems() {
        selectedDataList 
= new ArrayList();
        
for (MyData dataItem : dataList) {
            
//如果使用了分页的话这个判断不可少.
            if(selectIds.get(dataItem.getId())==null){  
                
continue;
            }

            
if (selectedIds.get(dataItem.getId()).booleanValue()) {
                selectedDataList.add(dataItem);
                selectedIds.remove(dataItem.getId()); 
// 删掉已取的项.
            }

        }

        
// 这里加需要处理的代码, 比如批量删除或修改.
        return "selected";
    }

    
public Map getSelectedIds() {
        
return selectedIds;
    }

    
public List getSelectedDataList() {
        
return selectedDataList;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值