也许这是一个我应该能够找到文档的问题,但我不熟悉很多术语,所以我很挣扎。
基本上,我使用的是 JSF2。我有一个 SessionScoped bean,它使用 postconstruct init() 方法。我希望每次 session 启动时都调用 init() 方法,这工作得很好,但我也希望每次加载 View 时都调用它。
有没有简单的方法可以做到这一点?
谢谢!
最佳答案
替换@PostConstruct
通过<f:event type="preRenderView">
.
<f:event type="preRenderView" listener="#{sessionScopedBean.init}" />
但是,更好的方法是将其分成 2 个 bean:a @SessionScoped
一又一个@ViewScoped
一。然后只需引用 @ViewScoped
相反,在 View 中插入一个并注入(inject) @SessionScoped
一个作为 @ViewScoped
的属性一个。
@Named
@ViewScoped
public class ViewScopedBean {
@Inject
private SessionScopedBean sessionScopedBean;
@PostConstruct
public void init() {
// ...
}
// ...
}
另请参阅:
关于jsf-2 - 在每个 View 上调用 session 作用域 bean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27829550/