我需要在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;
}
在dataTable中列出的所有元素在rowKey属性中必须具有非空值(在本例中为- id字段)。空值将导致问题中描述的行为。指定rowKey的另一种方法是使用自定义方法public Object getRowKey(RowClass rc)
实现SelectableDataModel。