2

我想将 Servlet 上下文注入到放置在实体中的验证器中。但是返回null...

例子:

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

TestValidator implements ConstraintValidator{
@Context ServletContext ctx
}

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

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

谢谢!

4

2 回答 2

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(); 
    } 

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

于 2012-09-26T07:56:05.407 回答
0

不是一个真正的答案,但太多的评论:

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

public class MyClass {

@Inject
MyValidator validator;

...

}

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

于 2012-09-22T07:24:50.367 回答