Primefaces 3.5中的数据表行选择(单个)选择所有行

时间:2014-05-30 08:57:37

标签: jsf jsf-2 primefaces

我需要在DataTable中添加和删除行,并使用按钮分别通过单个选择添加和删除行。

我的html / jsf代码是:

<p:dataTable id="creditTable" rowIndexVar="sn" 
                                value="#{cpeTrainingMB.cpeTrainingObj.cpeTrainigSchDetail}"
                                var="cpeDetail" scrollable="true" scrollHeight="100" 
                                selectionMode="single" 
                                rowKey="#{cpeDetail.id}">

                                <p:ajax event="rowSelect" update=":cpe:creditTable" listener="#{cpeTrainingMB.onRowSelect}"/>

                                    <p:column headerText="Sn">
                                    <h:outputText value="#{sn+1}"></h:outputText>
                                    </p:column>
                                    <p:column headerText="Date">
                                    <h:outputText value="#{cpeDetail.fromDtBS}"></h:outputText> 
                                    </p:column>
                                    <p:column headerText="Credit HR">
                                    <h:outputText value="#{cpeDetail.creditHr}"></h:outputText>
                                    </p:column>
                                </p:dataTable>

问题在于,当我添加多个数据,然后选择要删除的行时,它会立即选择所有不需要的行。 它仅适用于一行。

支持方法/功能如下:

public void onRowSelect(SelectEvent event){

        cpeScheSelected = null;
        this.cpeScheSelected = (CPETrainingScheduleModel)event.getObject();

        cpeTrainingScheObj = null;

        cpeTrainingScheObj = this.cpeScheSelected;

    }

1 个答案:

答案 0 :(得分:0)

dataTable中列出的所有元素必须在rowKey属性中具有非null值(在本例中为-id字段)。 Nulls将导致问题中描述的行为。指定rowKey的替代方法是使用自定义方法public Object getRowKey(RowClass rc)实现SelectableDataModel。