绑定到支持bean后获得自定义后处理的最佳方式是什么,类似于使用Spring MVC控制器时的onBind事件?
我想我需要一个PhaseListener (在阶段更新模型值之后),如下所示
new PhaseListener() {
public void beforePhase(PhaseEvent event) {}
public void afterPhase(PhaseEvent event) {
// custom post-processing
}
public PhaseId getPhaseId() {
return PhaseId.UPDATE_MODEL_VALUES;
}
}这是不是最佳实践?如果不是,我应该使用什么?
发布于 2009-12-10 23:11:43
好的,这个功能已经存在,所以你可以自由地使用它。
如果您需要每页(实际上是每个视图)阶段侦听器方法,请使用:
<f:view afterPhase="#{bean.afterPhase}">如果使用Facelets,则该属性称为afterPhaseListener
发布于 2009-12-10 23:13:12
在JEE5服务器中,JSF1.2可以利用@PostConstruct
在JavaEE5兼容容器中运行的PreDestroy实现必须支持附加@PostConstruct @PreDestroy,以帮助了解managedbean生命周期。
被声明为在请求、会话或应用程序范围内的托管bean上的方法,必须在执行资源注入(如果有的话)之后、将bean放入作用域之前由JSF实现调用。
发布于 2009-12-10 23:20:12
为什么不直接挂在INVOKE_ACTION阶段呢?为此,通常使用bean的操作方法。您可以使用h:commandLink或h:commandButton等UICommand组件来触发事件
<h:form>
<h:inputText value="#{bean.input}" />
<h:commandButton value="submit" action="#{bean.submit}" />
</h:form>Bean看起来像这样:
public String submit() {
// Do your thing here. The `this.input` is already set.
return "someNavigationCaseOutcome"; // Can even be null or void for a postback to same page.
}如果您只想涵盖所有 JSF POST请求,那么PhaseListener确实是最好的解决方案。我宁愿挂在INVOKE_ACTION的beforePhase上,这会更有意义。
https://stackoverflow.com/questions/1881556
复制相似问题