使用JSP的Spring-MVC。如何从JSP页面访问单例范围的对象?

时间:2014-10-28 06:36:03

标签: java spring jsp spring-mvc

在单例范围内获得自定义格式化程序bean。并希望在JSP页面中使用它。

第一种方式:

  • @Autowired(或@Inject)控制器中的bean
  • 将bean放在JSP上下文中

==代码==

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView get() {
        ModelAndView result = new ModelAndView( "view" );
        result.addObject( "format", format );
        return result;
    }

最简单的方法,但是当几乎每个页面都需要这个bean时,就会受到伤害。

第二种方式:

  • 将bean移动到会话范围
  • @Autowired(或@Inject)控制器中的bean
  • 现在bean存储在会话中,我们可以在sessionScope
  • 中找到它

==代码==

<div>
${sessionScope.format.doSmth()}
</div>

也不好。首先,需要注入bean - 只有在Spring Context注入bean时才会创建bean。否则,不会创建bean并将其放入会话中。 其次,我的IDE(IDEA)在这种情况下不提供语法高亮。

所以问题是:

有没有办法在JSP页面中使用单例范围的bean,而不是每次都将它放在上下文中并且支持IDE?

1 个答案:

答案 0 :(得分:1)

我会想到在JSP视图中有两种方法可以使(单例范围的)bean不可用。

  • 将其存储为ServletContext属性。任何bean(包括formatter bean本身的@Configuration bean)都可以在init-method中使用。然后可以通过EL立即访问所有JSP
  • 使用拦截器将其置于模型中或所有控制器之后。它仅适用于那些视图,但如果您以后决定使用其他视图,如Velocity或Thymeleaf,它仍然可用。

但我真的不知道如何获得IDE支持:-((不要使用IDEA)