gpt4 book ai didi

java - JSF @ViewScope,PrimeFaces

转载 作者:行者123 更新时间:2023-11-29 05:42:33 24 4
gpt4 key购买 nike

我有:主页和对话框上的按钮。

A 想为托管 bean (NewDialog.java) 提供 ViewScope 生命周期,执行对话。换句话说:按下按钮时重新创建 NewDialog bean,并在关闭对话框时销毁。

但是 NewDialog bean 是在加载主页时创建的。如何强制仅在按下按钮时才创建 bean?

<ui:composition
<h:form id="mainForm">
<p:commandButton value="New Dialog"
onclick="newDialogVar.show();"/>
</h:form>

<ui:include src="#{viewScopedBean.page}.xhtml" />
</ui:define>
</ui:composition>

包含页面:

    <ui:composition ..
<f:view >
<h:form id="formId"
<p:dialog appendToBody="false"
dynamic="true"
modal="true"
widgetVar="newDialogVar">

<p:commandButton value="Ok"
actionListener="#{newDialog.ok}"/>
</h:form>
</p:dialog>
</f:view>
</ui:composition>

bean 类:

@ManagedBean
@ViewScoped
public class NewDialog implements Serializable{

@PostConstruct
protected void postConstruct() {
LOG.info("----------------- PostConstruct -------------------");
}
}

我使用:PrimeFaces 3.5 和 Mojarra 2.1.22

提前致谢!

附言: 根据研究我补充说:

<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>

到 web.xml。

最佳答案

这是预期的行为。 <ui:include>在 View 构建期间运行,而不是在 View 渲染期间运行。所以即使你有条件地渲染它的 parent 之一,它仍然会评估它的 src在构建/恢复 View 期间的属性。可以在这个答案中找到“ View 构建时间”与“ View 渲染时间”的深入背景解释:JSTL in JSF2 Facelets... makes sense?

您的具体功能需求不清楚,所以我无法详细阐述正确的方法,但事实是,如果您想推迟创建 bean 以显示对话框,则需要寻找替代方法。也许您需要将 bean 分成两部分,一个保存包含路径,另一个保存对话框的数据?

关于java - JSF @ViewScope,PrimeFaces <p :dialog and <ui:include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16962128/

24 4 0

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