【问题标题】:JSF(Primefaces) ajax update of several elements by ID'sJSF(Primefaces)通过ID更新几个元素的ajax
【发布时间】:2011-05-27 08:43:52
【问题描述】:

关于 JSF 的另一个问题。特别是 Primefaces。
同时通过 id 对元素进行 ajax 更新有以下问题。 如果页面上的元素一个接一个,则 ajax 更新执行正常:

<ui:repeat value="#{showProducts.inCart}" var="cart">
 <td><p:spinner min="0" value="#{cart.count}" immediate="true">
 <p:ajax process="@this" update="count,subTotal"/></p:spinner></td>         
 <td><h:outputText value="#{cart.totalPrice}" id="count"/></td>
 <h:outputText value="#{showProducts.subTotal}" id="subTotal"/>      
</ui:repeat>

这里 id 为“count”的元素排在第一位,然后是 id 为“subtotal”的元素排在第二位。 如果页面上的元素不是一个一个的,那么第二个具有“subtotal” id 的元素不会被更新:

    <ui:repeat value="#{showProducts.inCart}" var="cart">
      <td><p:spinner min="0" value="#{cart.count}" immediate="true">
<p:ajax process="@this" update="count,subTotal"/></p:spinner></td>         
      <td><h:outputText value="#{cart.totalPrice}" id="count"/></td>
      <td><h:outputText value="#{cart.place}" /></td>
    </ui:repeat>
    <h:outputText value="#{showProducts.subTotal}" id="subTotal"/> 

这是正常行为还是我错过了一些参数?

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    如果要更新的组件不在同一个NamingContainer 组件内(ui:repeath:formh:dataTable 等),则需要指定“绝对”客户端 ID。以 : 为前缀(默认的 NamingContainer 分隔符)从根目录开始。

    <p:ajax process="@this" update="count :subTotal"/>
    

    为了确定,请检查生成的 HTML 中 subTotal 组件的客户端 ID 以获取实际值。如果它也在内部,例如 h:form,那么它的前缀也是它的客户端 ID,您需要相应地修复它。

    <p:ajax process="@this" update="count :formId:subTotal"/>
    

    建议使用空格分隔 ID,因为 &lt;f:ajax&gt; 不支持逗号分隔,否则初学者会感到困惑。

    【讨论】:

    • 我收到java.lang.IllegalArgumentException: master 的其他情况。 p:ajax update=":master"ui:include 中,它包含在 p:panelGrid id="master" 标记中。
    • 我想我最好发个新帖子?
    • 您的上下文不清楚。最好提前到stackoverflow.com/q/8634156
    • 我已经通过避免 :master: 一起在我的 id 前面修复它。 :-)
    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2012-03-21
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多