首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF注释@ListenerFor/@ListenersFor不起作用

JSF注释@ListenerFor/@ListenersFor不起作用
EN

Stack Overflow用户
提问于 2012-04-30 05:17:16
回答 1查看 1.6K关注 0票数 3

JSF注解@ListenerFor不适用于GlassFish或Tomcat。没有错误或警告。它只是不调用方法processEvent()。

代码语言:javascript
复制
@ListenersFor({@ListenerFor(systemEventClass=PostConstructApplicationEvent.class), 
public class MySystemEventListener implements SystemEventListener {

   @Override
   public void processEvent(SystemEvent event) throws AbortProcessingException {
      if(event instanceof PostConstructApplicationEvent){
         System.out.println("*********************************************");
         System.out.println("processEvent Method is Called: PostConstructApplicationEvent");
         System.out.println("*********************************************");
      }

      if(event instanceof PreDestroyApplicationEvent){
         System.out.println("*********************************************");
         System.out.println("processEvent Method is Called: PreDestroyApplicationEvent");
         System.out.println("*********************************************");
      }
}

   @Override
   public boolean isListenerForSource(Object o) {
      return (o instanceof Application);
   }

}

使用​​的想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-01 02:53:02

正如它的javadoc告诉您的那样,@ListenerFor的目的是放在UIComponentRenderer实现上,而不是放在独立的SystemEventListener实现上。对于后者,您需要在faces-config.xml中将其注册为<system-event-listener>

例如。

代码语言:javascript
复制
<application>
    <system-event-listener>
        <system-event-listener-class>com.example.MySystemEventListener</system-event-listener-class>
        <system-event-class>javax.faces.event.PostConstructApplicationEvent</system-event-class>
        <system-event-class>javax.faces.event.PreDestroyApplicationEvent</system-event-class>
    <system-event-listener>
</application>

对于特定的功能需求,您可能想要考虑使用一个热切初始化的应用程序范围的bean。这会稍微简单一些,并且不需要一些冗长的XML:

代码语言:javascript
复制
@ManagedBean(eager=true)
@ApplicationScoped
public void App {

    @PostConstruct
    public void init() {
        // ...
    }

    @PreDestroy
    public void destroy() {
        // ...
    }

}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10376053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档