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

时间:2011-02-16 13:23:44

标签: java jsp el

我希望在JSF或类似的东西没有使用的时候以编程方式添加自定义VariableResolver,这样在1中提到的范围内寻找bean之前,EL会首先尝试解析其中的变量

目标是使数据库中的对象可以通过其名称在EL中使用,并且可以将很多对象放入某个范围。

现在我将一个特殊的bean放在名为“z”的会话范围内,并且该bean扩展了Map接口,因此可以使用$ {z.address},$ {z等表达式访问对象。全名}。我正试图消除'z'。

如果我设法将我的解析器插入过滤器中更好(确保我会检查不要为每个网络请求多次执行此操作)

(编辑:也许我在谈论ELContext,如何把我自己的VariableMapper或ELResolver或类似的东西放在那里)

2 个答案:

答案 0 :(得分:7)

您可以按如下方式注册自定义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 / JSP 2.1或更新版本。

答案 1 :(得分:1)

我打算包装一个请求对象,覆盖getAttribute方法,在那里我可以返回所需的值。

在正常情况下,当在请求上下文中找不到它的名称属性时,servlet容器会在应用程序和会话上下文的上方。保留了一些有用的参数。

为了确保不覆盖在应用程序和会话上下文中设置的属性,包装器应首先检查它们并在设置时返回它们;否则,它会在最初的帖子中返回我想要的内容。

我没有检查,但确定它会起作用