GAE / J:无法注册自定义ELResolver

时间:2010-03-31 08:46:02

标签: java google-app-engine servlets el

我需要为Google App Engine项目注册自定义ELResolver

由于必须在收到任何请求之前注册,as specified by the 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。我已经填写了一份错误报告。有任何解决方法吗?

1 个答案:

答案 0 :(得分:4)

我不确定哪个servletcontainer GAE使用“引擎盖”(Jetty?Tomcat?),但这在Tomcat 6.x中可以识别为bug。解决方法是在出厂前强制加载JspRuntimeContext

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

看看这个或类似的黑客是否有帮助。