也许这是一个我应该能够找到文档的问题,但我不熟悉很多行话,所以我很挣扎。
基本上,我使用的是JSF2。 我有一个 SessionScoped bean,它使用 postconstruct() 方法。 我希望每次会话启动时都调用 init() 方法,这工作正常,但我也希望在每次加载视图时调用它。
有没有简单的方法可以做到这一点?
谢谢!
将@PostConstruct
替换为 <f:event type="preRenderView">
。
<f:event type="preRenderView" listener="#{sessionScopedBean.init}" />
然而,更好的做法是将其分成 2 颗豆子:一颗@SessionScoped
豆和一颗@ViewScoped
豆。然后只需在视图中引用@ViewScoped
,并将@SessionScoped
@ViewScoped
的属性。 @Named
@ViewScoped
public class ViewScopedBean {
@Inject
private SessionScopedBean sessionScopedBean;
@PostConstruct
public void init() {
// ...
}
// ...
}
另请参阅:
- 何时使用 f:viewAction/preRenderView 与 PostConstruct?
- 如何选择合适的豆类范围?