jsf - 如何使用 <h :selectBooleanCheckbox> in <h:dataTable> or <ui:repeat> to select multiple items?

标签 jsf datatable multipleselection uirepeat selectbooleancheckbox

我有一个带有 <h:dataTable> 的 Facelets 页面.在每一行中都有一个 <h:selectBooleanCheckbox> .如果选中复选框,则应在 bean 中设置相应行后面的对象。

  • 我该怎么做呢?
  • 如何在支持 bean 中获取选定的行或其数据?
  • 或者用 <h:selectManyCheckbox> 做会更好吗? ?
  • 最佳答案

    最好的办法是绑定(bind) h:selectBooleanCheckbox带有 Map<RowId, Boolean> 的值属性 RowId表示行标识符的类型。举个例子,你有一个 Item其标识符属性 id 的对象是 Long :

    <h:dataTable value="#{bean.items}" var="item">
        <h:column>
            <h:selectBooleanCheckbox value="#{bean.checked[item.id]}" />
        </h:column>
        ...
    </h:dataTable>
    <h:commandButton value="submit" action="#{bean.submit}" />
    

    这将与以下内容结合使用:
    public class Item {
        private Long id;
        // ...
    }
    


    public class Bean {
        private Map<Long, Boolean> checked = new HashMap<Long, Boolean>();
        private List<Item> items;
    
        public void submit() {
            List<Item> checkedItems = checked.entrySet().stream()
                .filter(Entry::getKey)
                .map(Entry::getValue)
                .collect(Collectors.toList());
    
            checked.clear(); // If necessary.
    
            // Now do your thing with checkedItems.
        }
    
        // ...
    }
    

    你看, map 自动填充id的所有表项作为键,复选框值自动设置为与项相关的映射值 id作为关键。

    关于jsf - 如何使用 <h :selectBooleanCheckbox> in <h:dataTable> or <ui:repeat> to select multiple items?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524514/

    相关文章:

    java - jsf 将一个 bean 生成的字符串传递给另一个 bean 中的字符串

    java - 使用循环在 JSF 中创建命令按钮?

    c# DataGridView 从行/列获取内容

    GWT为移动设备定制CellList多选模型

    GWT : Celltable Multiselection , MouseDown 事件?

    WPF 和 ListView 。 Shift - 选择多个项目。错误的开始项目

    java - RichFaces4 不渲染组件

    css - 如何改变<f :facet> header?的颜色

    php - DataTable,在导出为pdf或csv时从表中排除或隐藏列以及隐藏的div

    .net - 查找两个 .NET 数据表的交集