1

データテーブルの行選択時に読み込まれるprimefacesダイアログフォームがあります:

<p:dialog id="dialog-editfield" header="Edit Form Field"
        widgetVar="dlg8" dynamic="true" modal="true" resizable="false">
    <p:panelGrid id="displaySingleFormField" columns="2">

        <h:outputText value="Id:" style="font-weight:bold; padding-right:10px" />
        <h:outputText value="#{reportConfiguratorBean.selectedCRFormField.fieldId}" />

        <h:outputText value="Field Name:" style="font-weight:bold; padding-right:10px" />                       
        <h:outputText value="#{reportConfiguratorBean.selectedCRFormField.fieldName}" />

        <h:outputText value="Associated Feature:" style="font-weight:bold; padding-right:10px" />                       
        <p:selectOneMenu id="imtype2" value="#{reportConfiguratorBean.newOptionVariable}">
            <f:selectItem itemLabel="#{reportConfiguratorBean.selectedVariable}" />
            <f:selectItems value="#{reportConfiguratorBean.variables}" />
        </p:selectOneMenu>

        <h:outputText value="Field Label:" style="font-weight:bold; padding-right:10px" />                      
        <p:inputText value="#{reportConfiguratorBean.selectedCRFormField.fieldLabel}" />

        ...
        ...
    </p:panelGrid>
</p:dialog>

backbean に対応するオブジェクトを設定する ajax コンポーネントと、ダイアログをロードするコマンド ボタンは次のとおりです。

<p:panelGrid> ...
    <p:panel> ...
        <p:dataTable id="formfields" var="cRFormField" ... selection="#{reportConfiguratorBean.selectedCRFormField}"> ...
        ...
            <p:ajax event="rowSelect" listener="#{reportConfiguratorBean.setSelectedFieldRow}"/>
        ....
            <p:commandButton id="editCommand" oncomplete="dlg8.show()" value="Edit" update=":report-configurator:displaySingleFormField"/>

バックビーン コードは正常に動作し、データ テーブルで行が選択されるたびに、データベースから正しいデータを読み取り/設定します。

public void setSelectedFieldRow() {
    Long ffVirtualId = selectedCRFormField.getFieldId();
    virtualFieldId = selectedCRFormField.getFieldId().toString();   
    this.selectedCRFormField.setFieldId(ffVirtualId);
    this.setSelectedCRFormField(selectedCRFormField);
    ...
}

ダイアログ フォームのすべてが、最初に呼び出されたときに正しい方法でロードされます。後続のダイアログ フォーム呼び出しでも、最初の呼び出しで入力された値を保持する「inputText」コンポーネントを除いて、すべてが正しい方法で入力されます。

ただし、チェックしたところ、その変数 'selectedCRFormField.fieldLabel' は正しい値を保持しています。

また、inputText を h:outputText に変更すると、正しい (新しい) 値が表示されます。

コンポーネントの値を強制的に更新するにはどうすればよいですか? プライムフェイスのバグですか?

4

0 に答える 0