【问题标题】:p:remoteCommand update="@form" does not seem to work on h:inputHidden fieldsp:remoteCommand update="@form" 似乎不适用于 h:inputHidden 字段
【发布时间】:2014-09-05 11:32:24
【问题描述】:

以下 sn-p 有效:

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

【问题讨论】:

  • 对我来说很好。哪个PF版本?确定您正在运行您认为正在运行的代码? ajax 响应是怎样的?也许您正在嵌套表单?
  • 我使用的是 PF 3.5。枚举字段时代码运行正确,但是当我用@formform1:form1 替换它们时,代码不起作用。表格没有嵌套。不确定如何查看 ajax 响应。
  • 我刚刚尝试使用 PF 5.0 并遇到同样的问题
  • 在合适的浏览器中按 F12 以获取带有 HTTP 流量监控器的 Web 开发人员工具集(通常在“网络”选项卡/部分中)。选择ajax请求查看请求参数和响应正文。
  • 我刚刚看到了两种场景的XHR响应。在这两种情况下,都会填充输入字段(inputHidden 和 inputText 字段),但在 @form 场景中,响应还包含大量 HTML 页面,这似乎不正确。

标签: jsf primefaces


【解决方案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" />

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 确实没有。和@form的效果完全一样。
    猜你喜欢
    • 2015-12-13
    • 2021-11-18
    • 1970-01-01
    • 2021-07-27
    • 2020-11-24
    • 1970-01-01
    • 2020-04-04
    • 2023-04-06
    • 2017-08-01
    相关资源
    最近更新 更多