我需要为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。我已经填写了一份错误报告。有任何解决方法吗?
答案 0 :(得分:4)
我不确定哪个servletcontainer GAE使用“引擎盖”(Jetty?Tomcat?),但这在Tomcat 6.x中可以识别为bug。解决方法是在出厂前强制加载JspRuntimeContext
:
Class.forName("org.apache.jasper.compiler.JspRuntimeContext");
看看这个或类似的黑客是否有帮助。