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

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错误吗?

4

0 回答 0