我有一个 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"/>
backbean 代码工作正常,每次在数据表上选择一行时,它都会从数据库中读取/设置正确的数据:
public void setSelectedFieldRow() {
Long ffVirtualId = selectedCRFormField.getFieldId();
virtualFieldId = selectedCRFormField.getFieldId().toString();
this.selectedCRFormField.setFieldId(ffVirtualId);
this.setSelectedCRFormField(selectedCRFormField);
...
}
对话框表单上的所有内容在第一次调用时都以正确的方式加载。在随后的对话框表单调用中,除了保存第一次调用中填充的值的“inputText”组件之外,所有内容也都以正确的方式填充。
但是我已经检查过了,它的变量“selectedCRFormField.fieldLabel”保持正确的值。
此外,如果我将 inputText 更改为 h:outputText,则会显示正确的(新)值。
我如何强制组件刷新其值?这是一个primefaces错误吗?