【发布时间】:2015-12-19 18:05:37
【问题描述】:
我正在使用 Mojarra 2.2.12。我有一个情况,@ViewScoped@ManagedBean 在页面加载时立即被销毁,尽管视图没有结束。仅使用<h:body> 中的以下内容即可重现该问题:
<h:outputText value="#{testBean.value}" />
<h:link outcome="other" includeViewParams="true">link</h:link>
other 必须引用不同的视图,而不是同一个视图。重现问题不需要<f:viewParam>。
还有下面的bean:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class TestBean implements Serializable {
@PostConstruct
public void init() {
System.out.println("@PostConstruct on " + this);
}
@PreDestroy
public void clear() {
System.out.println("@PreDestroy on " + this);
}
public String getValue() {
return "test";
}
}
如果我们去掉includeViewParams="true"属性,那么bean不会立即被销毁。为什么includeViewParams="true"会导致这种行为?
【问题讨论】:
-
你是说它在页面加载时被破坏还是仅在点击链接时被破坏?
-
该 bean 在页面加载时被销毁。
-
根据目前提供的信息无法重现。
-
那么问题中的信息不足。想象一下,我们有一个完全空白的项目,所有内容都设置为最低限度和默认值,我们如何重现您的问题?这个问题必须涵盖所有这些。
-
感谢您花时间帮助我,我系统地复制了它。我使用一个非常简单的展示项目。该项目在 org.exemple.PF.showcase.TestBean 9 月记录 PostConstruct。 2015 年 2 月 25 日上午 9:11:13 com.sun.faces.application.view.ViewScopeManager
信息:CDI @ViewScoped bean 功能不可用 PreDestroy on org.exemple.PF.showcase.TestBean
标签: jsf destroy view-scope viewparams