【问题标题】:Why do I need a view class to resolve JSTL views in Spring MVC?为什么我需要一个视图类来解析 Spring MVC 中的 JSTL 视图?
【发布时间】:2015-09-08 13:41:06
【问题描述】:

我正在浏览 Craig Walls Manning Spring4 in Action

在创建 JSP 视图时,他建议,

InternalResourceViewResolver 最终解析逻辑视图 名称到引用 JSP 文件的 InternalResourceView 实例中。 但是,如果这些 JSP 文件引用 JSTL 标记以进行格式化或 消息,那么您可能需要配置 InternalResourceViewResolver 来解析 JSTLView。

拥有 InternalResourceView Resolver 解析器 JstlView 而不是 InternalResourceView 所需要做的就是设置其 viewClass 属性。

像这样,

 @Bean
    public ViewResolver viewResolver() {

        InternalResourceViewResolver resolver =
            new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);

        return resolver;
    }

为什么要添加这一行

resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);

这个类究竟是什么意思?

有什么建议吗?`

【问题讨论】:

  • 你不... Spring 自动检测 JSTL 的存在,并且当可用时将自动返回 JstlView。所以你在这里什么都没有添加。见here
  • @Deinum:同意,但是为什么这么好的书的作者会提到这一点。
  • 在早期版本中它没有这样做,我猜这是由于旧材料的重复使用......
  • 试图获取 InternalResourceViewResolver 的历史记录,但我猜那不是从 SVN 迁移到 github。

标签: spring jsp spring-mvc jstl


【解决方案1】:

在较早的 Spring 版本中,没有自动检测功能。这已经在不同的课程中慢慢引入。 InternalResourceViewResolver 早期没有自动检测 JSTL,这需要始终将 JstlView 指定为 viewClass

但是this revision 在曾经包含 Spring 的非常古老的 SVN 中添加了它,并且从那时起会自动检测要使用哪个 viewClass

提交消息


r14417 |乔勒 | 2007-08-05 00:01:19 +0200(zo,2007 年 8 月 5 日)| 2行

如果存在 JSTL API,InternalResourceViewResolver 默认使用 JstlView(而不是 InternalResourceView)


它仍然在书中的原因我不知道,我怀疑由于重复使用了以前版本中的材料,这已经被留下了,但这是一个猜测。只有the author 可以回答这个问题。

【讨论】:

  • 花了我一段时间才弄清楚旧的 SVN uris :) 并在 SVN 日志中进行了一些挖掘。一个不错的软件考古学:)。
猜你喜欢
  • 1970-01-01
  • 2011-01-18
  • 2013-01-26
  • 2015-04-25
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多