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>ました。<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 に答える