Jsf 检索<;中已编辑单元格的行索引;p:dataTable>;与<;p:rowEditor>;

Jsf 检索<;中已编辑单元格的行索引;p:dataTable>;与<;p:rowEditor>;,jsf,primefaces,Jsf,Primefaces,使用时,如何检索已编辑单元格的行索引 以下是相关代码: <p:dataTable id="datasetParamDt" var="datasetParam" value="#{projectCampaignManagementMB.allParametersList}" editable="true" rowIndexVar="rowIndex"> <p:ajax event="rowEdit" listener="#{projectCampaignManage

使用
时,如何检索已编辑单元格的行索引

以下是相关代码:

<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>

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

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

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



与具体问题无关,尽管您在这里没有使用任何验证,但由于您提到了“验证”一词,我想补充一点,验证应该由普通的验证器执行,而不是通过操作(侦听器)方法。使用
required
validator
属性,或
标记。

您需要知道它的确切位置?等等。。。您的输入/输出值被绑定到支持bean,而不是数据模型的迭代行对象!这有什么意义?您应该使用
value=“#{datasetParamDt.paramValue}”
而不是
value=“#{projectActivationManagementMB.paramValue}”
。我想知道这样是否就不需要知道行索引了。是的,这是我的问题paramValue不是DataSet类中的属性
public void onParameterValueEdit(RowEditEvent event) {  
    int index = ... // index of the row to which the edited cell belongs    
    parametersValue.set(Integer.parseInt(index),paramValue);
}
<h:outputText value="#{projectCampaignManagementMB.parametersValue[rowIndex]}" />
...
<p:inputText value="#{projectCampaignManagementMB.parametersValue[rowIndex]}" />