我想将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上下文?
谢谢!
答案 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 - 它们有自己独立的生命周期,而且不鼓励在那里使用注射。