2

ELResolverGoogle App Engine プロジェクトのカスタムを登録する必要があります。

Javadoc で指定されているように、リクエストを受信する前に登録する必要があるため:

アプリケーションがクライアントからリクエストを受け取った後に ELResolver を登録することは違法です。それ以降に ELResolver を登録しようとすると、IllegalStateException がスローされます。

私は ServletContextListener を使用しています:

public class RegisterCustomELResolver implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
        ServletContext context = sce.getServletContext(); 
        JspApplicationContext jspContext = 
            JspFactory.getDefaultFactory().getJspApplicationContext(context); 
        jspContext.addELResolver(new MyELResolver()); 
    } 

    ... 
}

問題は、JspFactory.getDefaultFactory()常に null を返すことです。私はすでにバグレポートを記入しました。回避策はありますか?

4

1 に答える 1

4

どの servletcontainer GAE が「ボンネットの下で」(Jetty? Tomcat?) を使用しているかはわかりませんが、これはTomcat 6.xのバグとして認識できます。JspRuntimeContext回避策は、ファクトリを取得する前に自分自身を強制的にロードすることです。

Class.forName("org.apache.jasper.compiler.JspRuntimeContext");

これまたは同様のハックが役立つかどうかを確認してください。

于 2010-03-31T11:59:15.110 に答える