如何在纯JSP中添加自定义VariableResolver

2022-08-24 00:00:00 java jsp el

我希望在不使用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或更高版本。

相关文章