JSF(Primefaces)通过ID更新几个元素的ajax
Posted
技术标签:
【中文标题】JSF(Primefaces)通过ID更新几个元素的ajax【英文标题】:JSF(Primefaces) ajax update of several elements by ID's 【发布时间】: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"/>
这是正常行为还是我错过了一些参数?
【问题讨论】:
【参考方案1】:如果要更新的组件不在同一个NamingContainer
组件内(ui:repeat
、h:form
、h: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,因为 <f:ajax>
不支持逗号分隔,否则初学者会感到困惑。
【讨论】:
我收到java.lang.IllegalArgumentException: master
的其他情况。 p:ajax update=":master"
在 ui:include
中,它包含在 p:panelGrid id="master"
标记中。
我想我最好发个新帖子?
您的上下文不清楚。最好提前到***.com/q/8634156
我已经通过避免 :master:
一起在我的 id 前面修复它。 :-)以上是关于JSF(Primefaces)通过ID更新几个元素的ajax的主要内容,如果未能解决你的问题,请参考以下文章
JSF 页面元素无法从具有动作属性的支持 bean 触发方法。(JSF2.0 + primefaces)
在 PrimeFaces 3.4 JSF 2.0 中按 id 查找组件