我的 Spring 应用程序中有一个 freemarker viewresolver:
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
在我的 Controller 方法中,我可以返回我的 freemarker 模板的名称:
return "timeline";
工作没有任何问题。
现在我已经创建了一种新的模板语言,并且我希望一些 Controller 使用这种自定义模板语言。所以我创建了一个 CustomViewResolver。
<bean id="viewResolver" class="org.CustomViewResolver">
现在我有 2 个 View 解析器,一个是 freemarker,另一个是我的自定义 View 解析器。
如何指定哪个 Controller 应使用哪个 ViewResolver?
因为我的后端将使用 freemarker,而我的前端将使用自定义的。
最佳答案
您可以尝试按照以下示例进行操作:
文件夹和文件结构
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>
Controller
@RequestMapping(value="/bar")
public String bar() { return "bar-baz"; }
@RequestMapping(value="/foo")
public String foo() { return "foo-fro"; }
您将利用框架提供的 View 名称模式匹配。如果遇到问题,您可以尝试为 View 解析器设置额外的 order
属性,以控制解析器尝试查找请求 View 的顺序。您可以将自定义 View 解析器放在顶部(最低顺序),并在自定义解析器失败时尝试其他解析器。
关于java - 指定每个 Controller 使用哪个 ViewResolver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25339741/