如何在纯JSP中添加自定义VariableResolver
我希望在不使用JSF或类似的东西时以编程方式添加一个自定义的VariableResolver,以便在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());
}
// ...
}
注意:此方法需要Servlet 2.5/JSP2.1或更高版本。
相关文章