2

Entityに配置したValidatorにServlet Contextを注入したい。しかし、nullが返されます...

例:

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

TestValidator implements ConstraintValidator{
@Context ServletContext ctx
}

シナリオは、アクションが facelet からのものであるということです。次に、マネージド Bean のアクションがユーザーのアクションに基づいて呼び出されます。そのアクションの ServletContext を Entity クラスでアノテートされた Validator に渡したいのですが null が返ってきます.. Servlet Context はアプリケーションスコープだと思いました。

質問: バリデータでそのサーブレット コンテキストにアクセスする方法はありますか?

ありがとう!

4

2 に答える 2

1

ServletContextListenerを実装するContextListenerという名前のクラスを作成しました

バリデーターの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 には注意する必要があります。エンティティ Bean には独自の独立したライフサイクルがあり、そこでインジェクションを使用することはお勧めできません。

于 2012-09-22T07:24:50.367 に答える