gpt4 book ai didi

jsf - p :ajax getter for update being called before listener

转载 作者:行者123 更新时间:2023-12-04 10:28:11 25 4
gpt4 key购买 nike

这是我的复选框。我正在监听器中准备一个逗号分隔的组件 ID 字符串。这里的问题是 getter getUpdateComponentList() 在调用监听器之前被调用。所以字符串永远不会更新。

<p:outputPanel>
<h:selectManyCheckbox value="#{form.colors}">
<f:selectItems value="#{form.colorItems}"/>
<p:ajax listener="#{form.testListener}" event="change" update="#{form.updateComponentList}" />
</h:selectManyCheckbox>
</p:outputPanel>

最佳答案

这是预期的行为。 PrimeFaces(和标准 JSF)不会重新评估 update (和 renderoncomplete 等)基于每个请求的属性。它们是基于每个 View 进行评估的。例如,RichFaces 在其 <a4j:ajax> 中做到了这一点。并产生完全预期的行为。

对于 PrimeFaces,最好的办法是删除 update属性和使用 RequestContext#addPartialUpdateTarget()#addPartialUpdateTargets()在操作方法中。

例如。

RequestContext.getCurrentInstance().addPartialUpdateTargets(updateComponentList);

它需要一个 Collection<String>List<String>Set<String> .

顺便说一句, event="change"是不必要的。只需使用组件的默认事件。

更新 对于稍后阅读此答案的较新 PrimeFaces 版本的用户,并且无法找到上述方法,这些方法确实已在较新的 PrimeFaces 版本中删除;使用两者之一 update()方法代替(一个采用 String ,另一个采用 Collection<String> )。
RequestContext.getCurrentInstance().update(updateComponentList);

关于jsf - p :ajax getter for update being called before listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com