我使用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()
中的新值进行更新。
答案 0 :(得分:1)
您的bean显然位于请求范围内。改为将bean放在视图范围内。
@ManagedBean
@ViewScoped
public class BeanA {}
@ManagedBean
@ViewScoped
public class BeanB {}
这样,只要您与相同的视图交互并且不在每个HTTP请求上重建bean,bean就会存在。
在调用操作之前,update
肯定不会执行。在渲染响应期间,不一定要执行支持bean的可能构造。它可以在恢复视图阶段发生。