在actionListener调用之前更新Ajax组件?

时间:2012-04-25 14:35:32

标签: ajax jsf primefaces actionlistener

我使用PrimeFaces <p:dialog>启动弹出式html页面,<p:commandButton>关闭它:

这是我按下确定按钮时的操作:

<p:commandButton id="submitButton" 
    value="OK" 
    actionListener="#{MultiFileSelectMgmtBean.actionOk}" 
    update=":formID:fileTreeID" 
    oncomplete="dlg1.hide();"/>

问题是在动作侦听器完成之前更新fileTreeID。 如何强制首先调用actionOk(),然后更新fileTreeID

修改

问题是弹出页面B(BackingBeanB)需要计算并保存父页面A在其BackingBeanA::BackingBeanA构造函数中加载和使用的一些值。在子页面B调用其BackingBeanB::actionOk()之前,父页面A是构造的。需要更新的组件fileTreeID位于页面A中,并且取决于在页面A构造函数中计算的值,因此它使用旧值进行更新,而不是使用BackingBeanB::actionOk()中的新值进行更新。

1 个答案:

答案 0 :(得分:1)

您的bean显然位于请求范围内。改为将bean放在视图范围内。

@ManagedBean
@ViewScoped
public class BeanA {}
@ManagedBean
@ViewScoped
public class BeanB {}

这样,只要您与相同的视图交互并且不在每个HTTP请求上重建bean,bean就会存在。

调用操作之前,update肯定不会执行。在渲染响应期间,不一定要执行支持bean的可能构造。它可以在恢复视图阶段发生。