データテーブルの行選択時に読み込まれる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 に変更すると、正しい (新しい) 値が表示されます。
コンポーネントの値を強制的に更新するにはどうすればよいですか? プライムフェイスのバグですか?