【问题标题】:Spring-MVC with JSP. How to access a singleton-scoped object from a JSP page?带有 JSP 的 Spring-MVC。如何从 JSP 页面访问单例范围的对象?
【发布时间】:2014-10-28 06:36:02
【问题描述】:

在单例范围内获得了一个自定义格式化程序 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 存储在 session 中,我们可以在 sessionScope 中找到它

==代码==

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

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

所以问题是:

有没有什么方法可以在 JSP 页面中使用单例范围的 bean,而无需每次都将其置于上下文中并获得 IDE 支持?

【问题讨论】:

  • 可能在视图解析器stackoverflow.com/questions/3046929/…中使用“exposedContextBeanNames”
  • 我会说你不应该在你的 JSP 中访问 bean。 JSP 应该是关于显示,而不是关于执行方法的视图。在发送到页面之前准备完整的模型,页面应该只渲染,不多也不少。

标签: java spring jsp spring-mvc


【解决方案1】:

我会考虑两种方法在 JSP 视图中使(单例范围的)bean disponible。

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

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

【讨论】:

  • 谢谢你,@serge-ballesta!
猜你喜欢
  • 2018-03-17
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多