【问题标题】:Update Primefaces component in 3.1 *without enclosing inside h:form*更新 3.1 中的 Primefaces 组件 *不包含在 h:form* 中
【发布时间】:2012-03-28 20:23:25
【问题描述】:

我看到了关于如何在迁移到 Primefaces 3.1 时纠正组件更新代码以防止异常的问题

在视图中找不到标识符为“....”的组件。

但是如何更新没有被表单元素包围的组件呢?比如我需要更新,使用远程命令,输出面板如下:-

<p:outputPanel id='messageBox''>
     ...
</p:outputPanel>

使用: Primefaces 3.1 与 JSF 2.1.6

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    "&lt;h:form&gt;" 组件指定一个唯一ID,然后使用如下代码更新组件

    udpate="@(#messageBox)"
    

    【讨论】:

    • 请解释为什么 OP 应该给表单一个唯一的 ID,还请解释为什么 OP 应该为此使用 PFS 而不是普通的客户端 ID。
    【解决方案2】:

    只需通过其绝对客户端 ID 来引用它。 update 属性默认相对于当前的UINamingContainer 组件(&lt;h:form&gt; 就是这样一个)。假设给定的&lt;p:outputPanel&gt; 本身不在任何其他UINamingContainer 组件内,那么只需使用update=":messageBox"

    <p:commandButton ... update=":messageBox" />
    

    如果你不确定,那么你需要在浏览器中打开页面,查看源代码并在其中找到&lt;p:outputPanel id="messageBox"&gt;生成的HTML元素,取其@的确切值987654330@ 属性,然后在其前面加上默认命名容器分隔符:

    【讨论】:

    • 我不太喜欢直接使用 JSF 生成的 id,从源代码来看,因为在页面代码中进行微小更改会发生变化。我是否应该使用您在此处回答中描述的binding 方法:stackoverflow.com/questions/7970268/…
    • 只需给所有UINamingContainer 组件一个固定的ID。例如。 &lt;h:form id="foo"&gt;。这样 JSF 就不会为他们自动生成一个。
    • 谢谢.. 但我仍然很好奇为什么不首选绑定方法而不是为所有组件提供 ID? :)
    • 因为它不必要地复杂了。首先尝试做最简单的事情。否则,任何未来的开发人员/代码审查员都可能想知道“为什么”你在使用 binding 而不是 id
    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多