我们希望从控制器提供替代PDF视图以及常规JSP视图,并添加了ContentNegotiatingViewResolver
和XmlViewResolver
来处理此问题。
我找到的所有示例,包括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。 我们调查了几个不起作用的选项并不令人满意:
<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。XmlViewResolver
定义。这只是行不通;如果找不到匹配的视图,则此类型的第一个解析程序不会返回null,它只会因异常而失败,并且不会使用后续的InternalResourceViewResolver
。ViewResolvers
无视其观点的目的。Controller
属性中使用通配符;这失败了,例外。我确信有一个很好的优雅解决方案,但它现在正在逃避我。有没有更好的方法,以便我可以返回一个视图名称,如'a / b / c',它有可能被XmlViewResolver解析?
感谢您提出任何建议。
理查德
答案 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。