我希望以编程方式添加一个自定义的VariableResolver,当JSF或类似的东西没有使用时,所以在寻找1中提到的范围内的bean之前,EL会首先尝试解析其中的变量.
目标是使数据库中的对象可以通过其名称在EL中使用,并且可以将很多对象放入某个范围.
现在我将一个特殊的bean放在名为"z"的会话范围内,并且该bean扩展了Map接口,因此可以使用$ {z.address},$ {z.fullName}等表达式访问对象.我试图消除'z'.
如果我设法将我的解析器插入过滤器中更好(确保我会检查不要为每个Web请求多次执行此操作)
(编辑:也许我在谈论ELContext,如何放置我自己的VariableMapper或ELResolver或类似的东西)
您可以ELResolver按如下方式注册自定义.
@WebListener
public class Config implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext servletContext = event.getServletContext();
JspApplicationContext jspContext = JspFactory.getDefaultFactory().getJspApplicationContext(servletContext);
jspContext.addELResolver(new YourELResolver());
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:此方法需要Servlet 2.5/JSP 2.1或更高版本.