0

我正在使用 primefaces 数据表进行基于复选框的选择,并尝试实现给定的示例。他们使用 Model 说,userModel可以实现 SelectableDataModel 接口。我不想使用模型,所以我为此使用了 rowKey 。

例如

数据表.xhtml

<p:dataTable id="table" var="item" value="#{userBean.allItems}"
       paginatorPosition="bottom" paginator="true" rows="3"
       selection="#{userBean.selectedItems}" rowKey="#{item[0]}">

       <p:column selectionMode="multiple"/>

       <p:columns value="#{userBean.itemColHeader}" columnIndexVar="colIndex" var="colName" >
       <f:facet name="header" >
           <h:outputText value="#{colName}"/>
       </f:facet>
           <h:outputText value="#{item[colIndex]}"/>
       </p:columns>
</p:dataTable>

这里,

allItems = ArrayList<ArrayList<String>>

selectedItems = ArrayList<ArrayList<String>>

selectedItems = ArrayList<String>

用户Bean.java

@ManagedBean(name="userBean")
@ViewScoped
public class userBean implements SelectableDataModel {

    private ArrayList<ArrayList<String>> selectedItems;

    public ArrayList<ArrayList<String>> getSelectedItems() {
        return selectedItems;
    }

    public void setSelectedItems(ArrayList<ArrayList<String>> selectedUsers) {
        this.selectedItems = selectedItems;
    }
}  

我的问题:

1) When I select mulitple rows, selectedUsers remains empty.
2) After selecting next page, previous selection get lost. 

我浏览了@BelusC博客,发现绑定是可能的解决方案,但无法通过他的说明解决我的问题。是否需要转换器..?我的方法有什么问题吗。谢谢

更新:1

使用 Arraylist 的 Arraylist( allItems ) 的原因只是为了使数据表通用。在绘制数据表时,我不需要担心列数。这就是为什么我要检索不应依赖于对象的选定项目(:car[] selectedcars)

4

3 回答 3

2

rowKey="#{item[0]}"对我来说没有意义。它将在每次迭代中指向相同的 (0) 对象。在 dataTable 演示中,它指向当前的car.model.

您是否尝试更改为#{item}?

于 2012-09-30T11:09:49.543 回答
2

我有类似的问题,我使用<p:ajax>.

首先,我会按照 akoskm 所说的那样做,并拥有一个唯一的行键。

然后我会使用一个数组 ( List<String>[]) (ListArrayList)更通用selectedItems

最后你可以添加:

<p:dataTable ...>
    <p:ajax event="rowSelectCheckbox" process="@this"/>
    <p:ajax event="rowUnselectCheckbox" process="@this"/>
    <p:ajax event="toggleSelect" process="@this"/>
</p:dataTable>

只要确保你有一个<h:form>在桌子周围

这将确保组件将数据推送到 bean。我不确定它是否会解决分页问题,​​请告诉我。

于 2013-01-31T10:23:01.347 回答
0

正确答案:仅选择复选框的 Primefaces 数据表

您可以使用解决此问题rowSelectionMode="add"

于 2015-03-05T20:15:49.490 回答