是否可以注释要在阶段调用的支持 bean 方法?

Posted

技术标签:

【中文标题】是否可以注释要在阶段调用的支持 bean 方法?【英文标题】:Is it possible to annotate a backing bean method to be called on a phase? 【发布时间】:2012-10-21 20:57:53 【问题描述】:

我需要在组件绑定后调用支持 bean 中的初始化方法。 @PostConstruct 在组件绑定之前调用。组件绑定后导致方法调用的方法有JSF注解吗?

目前可以使用<f:view afterPhase="#bean.initialize"><f:event type="preRenderView" listener="#bean.initialize" /> 之类的东西,这需要页面端和bean 端的代码。有没有 bean-side-only 解决方案?

【问题讨论】:

【参考方案1】:

在标准的 JSF API 中没有这样的东西。

你能得到的最接近的是 getter 中的延迟加载。

public UIComponent getSomeComponent() 
    if (!initialized(someComponent)) 
        initialize(someComponent);
    
    return someComponent;

或在 setter 中延迟执行。

public void setSomeComponent(UIComponent someComponent) 
    if (!initialized(someComponent)) 
        initialize(someComponent);
    
    this.someComponent = someComponent;

【讨论】:

以上是关于是否可以注释要在阶段调用的支持 bean 方法?的主要内容,如果未能解决你的问题,请参考以下文章

JSF。在每个页面加载时调用支持 bean 方法[重复]

spring bean生命周期

Managed Bean中的EJB3.0 @EJB注释JSF2 Websphere 7是不可能的?

如何从非人脸请求中调用 JSF 支持 bean 方法?

如何从链接/非面孔请求调用 JSF 支持 bean 方法

在 Spring java 配置中调用 @Bean 注解的方法