p:remoteCommand update =" @ form"似乎不适用于h:inputHidden字段

时间:2014-09-05 11:32:24

标签: jsf primefaces

以下代码段有效:

<h:form id="form1">

    <h:inputHidden value="#{bean.field1}" id="field1"/>
    <h:inputHidden value="#{bean.field2}" id="field2"/>
    <h:inputHidden value="#{bean.field3}" id="field3"/>
    <h:inputHidden value="#{bean.field4}" id="field4"/>
    <h:inputHidden value="#{bean.field5}" id="field5"/>
    <h:inputHidden value="#{bean.field6}" id="field6"/>
    <h:inputHidden value="#{bean.field7}" id="field7"/>
    <h:inputHidden value="#{bean.field8}" id="field8"/>
    <h:inputHidden value="#{bean.field9}" id="field9"/>

    <p:remoteCommand name="loadRecord" actionListener="#{bean.loadRecord}" 
        process="@this" 
        update="field1 field2 field3 field4 field5 field6 field7 field8 field9" />

</h:form>

问题在于,当要更新的字段数量很大(我有另外一个包含40个字段的页面)时,它变得无法维护。

我尝试使用

<p:remoteCommand name="loadRecord" actionListener="#{bean.loadRecord}" 
  process="@this" update="@form" />

但字段未更新。有什么想法吗?

更新

此问题不仅限于隐藏字段,它似乎适用于任何输入字段,例如

<h:inputText id="name" value="#{bean.name}" />

2 个答案:

答案 0 :(得分:1)

您可以将Naming Container中的字段(如果它们组合在一起)包装起来。然后,您只需更新命名容器,它的所有内容也将更新。您的h:form已经是NamingContainer,但如果您不想更新整个表单,可以试试这个:

<p:outputPanel id="myContainer">
  <h:inputHidden value="#{bean.field1}" id="field1"/>
  <h:inputHidden value="#{bean.field2}" id="field2"/>
  <h:inputHidden value="#{bean.field3}" id="field3"/>
  <h:inputHidden value="#{bean.field4}" id="field4"/>
  ...
</p:outputPanel>

<p:remoteCommand name="loadRecord" actionListener="#{bean.loadRecord}" 
    process="@this" 
    update="myContainer" />

答案 1 :(得分:-1)

您应该使用要更新的表单的ID。在您的情况下update="form1"