我嘗試使用下面的代碼在獨立模式下運行EL 3.0在Tomcat 8一個servlet內 -在Tomcat以獨立模式運行EL 3.0 Servlet中8
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("name", "Test1");
ELProcessor processor = new ELProcessor();
processor.getELManager().addBeanNameResolver(new BeanNameResolver() {
@Override
public Object getBean(String beanName) {
return request.getAttribute(beanName);
}
});
response.getWriter().write((String)processor.eval("name"));
}
在EL 3.0提及的各種文章,爲了解析一個bean,它應該首先使用ELProcessor.defineBean()來定義。然而,使用上面定義的自定義bean解析器,它應該能夠從請求中解析bean。當我運行在Tomcat上8這段代碼,它顯示了以下錯誤 -
javax.el.PropertyNotFoundException: ELResolver cannot handle a null base Object with identifier 'name'
org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:100)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187)
javax.el.ELProcessor.getValue(ELProcessor.java:45)
javax.el.ELProcessor.eval(ELProcessor.java:38)
org.koyad.servlet.TestELServlet.doGet(TestELServlet.java:59)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
可能有人請解釋這種現象?