指定每个Controller使用哪个ViewResolver?

时间:2014-08-16 11:31:21

标签: java spring freemarker

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

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

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

return "timeline";

没有任何问题。

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

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

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

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

因为我的后端会使用freemarker而我的前端会使用自定义标记。

1 个答案:

答案 0 :(得分:2)

您可以尝试以下示例中的内容:

文件夹和文件结构

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

<强>调度-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属性,以控制解析器应尝试查找请求视图的顺序。如果自定义解析程序失败,您可以将自定义视图解析程序置于顶部(最低顺序)并尝试其他解析程序。