spring MVC XmlViewResolver配置

时间:2012-11-02 00:12:58

标签: spring-mvc

我们希望从控制器提供替代PDF视图以及常规JSP视图,并添加了ContentNegotiatingViewResolverXmlViewResolver来处理此问题。 我找到的所有示例,包括Spring文档,都返回一个简单的视图名称,XmlViewResolver映射到其views.xml文件中的bean ID(在我们的例子中,是一个将PDF写入{的bean {1}})。

但是我们的jsps是在InternalResourceViewResolver中定义的位置的子文件夹中组织的。

如,

HttpResponse

因此,在我们的控制器中,我们为/WEB-INF/pages/a/b/c.jsp中的JSP返回视图名称,如“a / b / c”。

这适用于JSP,除了你不能在views.xml中将bean id定义为'a / b / c';它不是有效的bean ID。 我们调查了几个不起作用的选项并不令人满意:

  1. 将所有JSP放在一个文件夹中,以便我们可以使用可由<bean id="viewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> 解析的bean-id-naming兼容的视图名称。这可行,但不适合组织我们的JSP。
  2. 使用不同的前缀有多个XmlViewResolver定义。这只是行不通;如果找不到匹配的视图,则此类型的第一个解析程序不会返回null,它只会因异常而失败,并且不会使用后续的InternalResourceViewResolver
  3. 使用单独的控制器方法(或控制器中的条件代码,根据请求的内容类型或URL后缀返回视图名称);这些解决方案似乎打败了ViewResolvers无视其观点的目的。
  4. 尝试在XmlViewResolver的Controller属性中使用通配符;这失败了,例外。
  5. 我确信有一个很好的优雅解决方案,但它现在正在逃避我。有没有更好的方法,以便我可以返回一个视图名称,如'a / b / c',它有可能被XmlViewResolver解析?

    感谢您提出任何建议。

    理查德

1 个答案:

答案 0 :(得分:1)

当然,经过一些挖掘后,豆子别名是可行的方法:

在XmlViewResolver所针对的views.xml文件中:

<bean id="PdfView" class="com.blah.PdfDocView" /> 
<alias name="PdfView" alias="/a/b/structuredDocument"/>

映射&#39; / a / b / structuredDocument&#39;到PdfDocView bean。