我有:在主页和对话框按钮。
a希望具有托管bean(newdialog.java)的viewscope生命周期,执行什么对话框。换句话说:按下按钮时重新创建NewDialogbean,关闭对话框时销毁。
但是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>
豆子:
@ManagedBean
@ViewScoped
public class NewDialog implements Serializable{
@PostConstruct
protected void postConstruct() {
LOG.info("----------------- PostConstruct -------------------");
}
}
我使用:primefaces 3.5和mojarra 2.1.22
提前谢谢!
p、 s.:根据研究,我补充说:
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
到web.xml。
2条答案
按热度按时间n8ghc7c11#
这是预期的行为。这个
<ui:include>
在视图生成时运行,而不是在视图渲染时运行。因此,即使您有条件地呈现它的一个父级,它仍将计算它的src
属性创建/恢复视图时。关于“视图构建时间”和“视图渲染时间”的深入背景解释可以在以下答案中找到:jsf2 facelets中的jstl。。。有道理吗?您的具体功能需求还不清楚,因此我无法详细阐述正确的方法,但事实是,如果您想推迟创建bean以显示对话框,则需要寻找另一种方法。也许您需要将bean分成两部分,一部分保存include路径,另一部分保存对话框的数据?
ejk8hzay2#
我有一个像你这样的场景,在对话框中显示一个图形,这个按钮调用一个方法来设置src为dialog:
这是对话框(在同一页中)
managedbean服务SMB:
这是grafmontosservicios.xhtml
构建图形的托管bean
}