【问题标题】:Specify which ViewResolver to use per Controller?指定每个控制器使用哪个 ViewResolver?
【发布时间】:2014-08-16 11:31:20
【问题描述】:

我的 spring 应用程序中有一个 freemarker viewresolver:

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

在我的控制器方法中,我可以返回我的 freemarker 模板的名称:

return "timeline";

工作没有任何问题。

现在我创建了一种新的模板语言,我希望一些控制器使用这种自定义模板语言。所以我创建了一个 CustomViewResolver。

<bean id="viewResolver" class="org.CustomViewResolver">

现在我有 2 个视图解析器,一个 freemarker 一个和我的自定义一个。

如何指定哪个控制器应该使用哪个 ViewResolver?

因为我的后端将使用 freemarker,而我的前端将使用自定义的。

【问题讨论】:

    标签: java spring freemarker


    【解决方案1】:

    您可以尝试以下示例:

    文件夹和文件结构

    webapp
       WEB-INF
           dispatcher-servlet.xml
           jsp
             bar
               bar-baz.jsp
             foo
               foo-fro.jsp
    

    dispatcher-servlet.xml

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/bar/" />
      <property name="suffix" value=".jsp"/>
      <property name="viewNames" value="bar-*"/>
    </bean>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/foo/" />
      <property name="suffix" value=".jsp"/>
      <property name="viewNames" value="foo-*"/>
    </bean>
    

    控制器

    @RequestMapping(value="/bar")
    public String bar() { return "bar-baz"; }
    
    @RequestMapping(value="/foo")
    public String foo() { return "foo-fro"; }
    

    您将利用框架提供的视图名称模式匹配。如果遇到问题,可以尝试为视图解析器设置一个额外的order 属性,以控制解析器尝试定位请求视图的顺序。如果自定义解析器失败,您可以将自定义视图解析器放在顶部(最低顺序)并尝试其他解析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-03
      • 2017-04-09
      • 2018-08-21
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多