使用<p:rowEditor>
时,如何检索已编辑单元格的行索引?
以下是相关代码:
<p:dataTable id="datasetParamDt" var="datasetParam" value="#{projectCampaignManagementMB.allParametersList}" editable="true" rowIndexVar="rowIndex">
<p:ajax event="rowEdit" listener="#{projectCampaignManagementMB.onParameterValueEdit}" update=":campaignForm:growl" />
<p:ajax event="rowEditCancel" listener="#{projectCampaignManagementMB.onParameterValueCancel}" update=":campaignForm:growl"/>
<p:column headerText="Value">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{projectCampaignManagementMB.paramValue}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{projectCampaignManagementMB.paramValue}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Options" style="width:50px">
<p:rowEditor />
</p:column>
</p:dataTable>
在简单的数据表格中,我过去常常使用<f:param>
中的<p:commandLink>
,如下所示:
<f:param name="index" value="#{rowIndex}" />
但是,在<p:rowEditor>
的情况下,当用户在onParameterValueEdit()
方法中验证编辑后的值时,如何获取行索引?
public void onParameterValueEdit(RowEditEvent event) {
int index = ... // index of the row to which the edited cell belongs
parametersValue.set(Integer.parseInt(index),paramValue);
}
答案 0 :(得分:3)
这种设计毫无意义。只需将组件值直接绑定到parametersValue
列表即可。
<h:outputText value="#{projectCampaignManagementMB.parametersValue[rowIndex]}" />
...
<p:inputText value="#{projectCampaignManagementMB.parametersValue[rowIndex]}" />
这样你也不需要知道行索引了,你也可能不再需要那些动作监听器方法。我只会将属性名称重命名为parameterValues
以修复不正确的英语。
无关具体问题,即使您没有在此处使用任何验证,但由于您提到“验证”一词,我想补充一点,验证应该由普通的验证器,而不是动作(监听器)方法。使用required
或validator
属性,或<f:validator>
或<f:validateXxx>
标记。