CDI不在验证器中工作

时间:2012-09-21 06:55:06

标签: java-ee servlets entity cdi validation

我想将Servlet Context注入实体中的Validator。但返回null ...

示例:

@Entity
class Test{
@TestValidator()
int something;
}

TestValidator implements ConstraintValidator{
@Context ServletContext ctx
}

场景是该动​​作来自facelet。然后根据用户的操作调用托管bean的操作。我想将该操作的ServletContext传递给Entity类中注释的Validator,但null返回..我认为Servlet Context是应用程序作用域。

问题:有没有办法在验证器中访问该Servlet上下文?

谢谢!

2 个答案:

答案 0 :(得分:1)

我创建了一个名为ContextListener的类,它实现了ServletContextListener

我创建了一个静态字段和方法来访问验证器

中的ServletContext
 public class ContextListener implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent sce) { 
            sc = sce.getServletContext();
        }
        @Override
        public void contextDestroyed(ServletContextEvent sce) { 
        }
        private static ServletContext sc;

        public static ServletContext getServletContext(){
            return sc;
        }
    }


    TestValidator implements ConstraintValidator{ 
     ServletContext sc = ContextListener.getServletContext(); 
    } 

但请分享任何优雅的答案。感谢

答案 1 :(得分:0)

不是一个真正的答案,但对评论来说太过分了:

您的代码示例看起来有点碎片化。你确定你创建了验证器吗?这将导致代码看起来像这样:

public class MyClass {

@Inject
MyValidator validator;

...

}

另外,你必须小心实体bean - 它们有自己独立的生命周期,而且不鼓励在那里使用注射。