【问题标题】:p:ajax getter for update being called before listenerp:ajax getter 用于在侦听器之前调用更新
【发布时间】:2012-03-15 16:16:23
【问题描述】:

这是我的复选框。我正在侦听器中准备一个逗号分隔的组件 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>

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    这是预期的行为。 PrimeFaces(和标准 JSF)不会根据每个请求重新评估 update(和 renderoncomplete 等)属性。他们是在每次观看的基础上进行评估的。例如,RichFaces 在其 &lt;a4j:ajax&gt; 中执行此操作并产生完全预期的行为。

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

    例如

    RequestContext.getCurrentInstance().addPartialUpdateTargets(updateComponentList);
    

    它需要一个Collection&lt;String&gt;,例如List&lt;String&gt;Set&lt;String&gt;

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


    更新适用于更新 PrimeFaces 版本的用户,他们稍后正在阅读此答案并且找不到上述方法,这些方法确实在更新的 PrimeFaces 版本中被删除;请改用两种update() 方法之一(一种采用String,另一种采用Collection&lt;String&gt;)。

    RequestContext.getCurrentInstance().update(updateComponentList);
    

    【讨论】:

    • @Balusc,你能给我一个例子吗? !
    • 因为我找不到 addPartialUpdateTargets 方法
    • @berber:它在 PrimeFaces 3.2 中已被弃用,并在 PrimeFaces 3.4 中被删除。你需要update() 方法。
    • @BalusC 感谢您的更正。但显然这不是我正在寻找的解决方案:(因为我得到了同样的例外。这是27 nov. 2012 17:55:24 com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback visit GRAVE: java.lang.NullPointerException ...你能帮我吗?
    【解决方案2】:

    我遇到了类似的问题,即在“侦听器”之前执行“更新”。放置两个 'p:ajax' - 一个用于侦听器,另一个用于更新 - 就可以了。

    在你的情况下:

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

    【讨论】:

    • 这也适用于我。我想知道为什么 BalusC 方式对我不起作用。谢谢:-)
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 2015-07-11
    • 2012-05-08
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2018-12-05
    • 2014-08-27
    相关资源
    最近更新 更多