0

我正在使用 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构造函数中加载和使用的一些值。发生的情况是父页面 A 是在子页面 B 调用它之前BackingBeanB::actionOk()构建的。需要更新的组件fileTreeID在页面 A 中,并且依赖于页面 A 构造函数中计算的值,因此它使用旧值进行更新,而不是使用要计算的新值进行更新BackingBeanB::actionOk()

4

1 回答 1

1

您的 bean 显然在请求范围内。而是将 bean 放在视图范围内。

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

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

在调用操作之前update绝对不会执行。支持 bean 的可能构造不一定只在呈现响应期间执行。它可能已经在恢复视图阶段发生。

于 2012-04-25T15:18:35.080 回答