1

使用时<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>in a<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);
}
4

1 回答 1

3

这种设计毫无意义。只需将组件值直接绑定到parametersValue列表即可。

<h:outputText value="#{projectCampaignManagementMB.parametersValue[rowIndex]}" />
...
<p:inputText value="#{projectCampaignManagementMB.parametersValue[rowIndex]}" /> 

这样,您也不再需要了解行索引,并且您可能也不再需要那些动作侦听器方法。我只会重命名属性名称parameterValues来修复不正确的英语。


与具体问题无关,即使您在这里没有使用任何验证,但是由于您提到了“验证”一词,我想补充一点,该验证应该由普通验证器执行,而不是由 action(listener) 方法执行. 使用requiredorvalidator属性或<f:validator>or<f:validateXxx>标签。

于 2012-10-22T20:48:54.627 回答