首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >@ManagedBean中使用@Interceptor

@ManagedBean中使用@Interceptor
EN

Stack Overflow用户
提问于 2012-06-28 08:38:03
回答 2查看 5.7K关注 0票数 0

CDI的拦截在@Named中非常有效,但在@ManagedBean中却不起作用:

Logable.java

代码语言:javascript
运行
复制
@InterceptorBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Logable {

}

LoggingInterceptor.java

代码语言:javascript
运行
复制
@Logable
@Interceptor
public class LoggingInterceptor {
@AroundInvoke
    public Object log(InvocationContext ctx) throws Exception {
//log smth. with ctx.
}
}

WorkingBean.java

代码语言:javascript
运行
复制
@Named
@Logable
public class WorkingBean implements Serializable {
 //works : methods will be logged
}

beans.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

<interceptors>
 <class>LoggingInterceptor</class>
</interceptors>

</beans>

ViewScopedBean.java

代码语言:javascript
运行
复制
@Logable
@ManagedBean
public class ViewScopedBean implements Serializable {
 //doesn't work
}

我知道,这种拦截器是用来与WebBeans (和EJB)一起工作的,但我正在寻找的解决方案----两个世界(描述+ JSF) --具有相同的截取器概念--我需要@ViewScoped @ManagedBean,这就是为什么我不能放弃@ManagedBean,而改用纯WebBeans。

系统: Mojarra 2.1.7

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-28 20:20:14

据我所知,根本没有。JSF没有任何支持拦截的功能。

票数 1
EN

Stack Overflow用户

发布于 2012-11-21 12:24:13

JSF不支持CDI拦截,就像您发布的文章本身一样。CDI拦截器将适用于像@PostConstruct这样的生命周期方法。

代码语言:javascript
运行
复制
    @Inherited
    @InterceptorBinding
    @Retention(RUNTIME)
    @Target({TYPE})
    public @interface TypeLogger {

      @Nonbinding
      public LoggingLevel logLevel() default LoggingLevel.INFO;
    }

这是如何使用它,因为它只绑定到@Target({TYPE})

代码语言:javascript
运行
复制
    @ManagedBean
    @ViewScoped
    @TypeLogger
    public class Index implements Serializable {

       private static final long serialVersionUID = 3336392241545517919L;

       @PostConstruct
       private void init() {
         setup();
       }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11240924

复制
相关文章

相似问题

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