在单例范围内获得了自定义格式化程序 bean。并想在JSP页面中使用它。
第一种方法:
- @Autowired(或@Inject) Controller 中的 bean
- 将 bean 放入 JSP 上下文中
==代码==
@RequestMapping(method = RequestMethod.GET)
public ModelAndView get() {
ModelAndView result = new ModelAndView( "view" );
result.addObject( "format", format );
return result;
}
最简单的方法,但是当几乎每个页面都需要这个 bean 时,就会很痛苦。
第二种方式:
- 将 bean 移至 session 范围
- @Autowired(或@Inject) Controller 中的 bean
- 现在bean已存储在 session 中,我们可以在sessionScope中找到它
==代码==
<div>
${sessionScope.format.doSmth()}
</div>
也很糟糕。首先,需要注入(inject)bean——只有当Spring Context注入(inject)bean时才会创建bean。否则,bean 将不会被创建并放入 session 中。 其次,在这种情况下,我的 IDE (IDEA) 不提供语法突出显示。
所以问题是:
是否有任何方法可以在 JSP 页面中使用单例范围的 bean,而无需每次都将其放入上下文中并且需要 IDE 支持?
最佳答案
我会考虑两种方法来使(单例范围)bean 在 JSP View 中可分配。
- 将其存储为 ServletContext 属性。任何 Bean(包括格式化程序 Bean 本身的 @Configuration Bean)都可以在
init-method
中实现。然后所有 JSP 都可以通过 EL 立即访问它 - 使用拦截器将其放入模型中的所有或部分 Controller 之后。它仅适用于这些 View ,但如果您稍后决定使用 Velocity 或 Thymeleaf 等其他 View ,它仍然有效
但我真的不知道如何获得 IDE 支持:-((不要使用 IDEA)
关于java - Spring-MVC 与 JSP。如何从 JSP 页面访问单例范围的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26602219/