我們希望從我們的控制器中提供替代的PDF視圖以及常規的JSP視圖,並添加了ContentNegotiatingViewResolver
和XmlViewResolver
來處理此問題。 我發現的所有示例(包括Spring文檔)都返回一個簡單的視圖名稱,XmlViewResolver
將其映射到其views.xml文件(在我們的示例中,將PDF寫入HttpResponse
)中的bean ID。spring MVC XmlViewResolver配置
但是,我們將我們的jsps組織在我們的InternalResourceViewResolver中定義的位置的子文件夾中。
例如,
<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>
所以,從我們的控制器中,我們返回視圖名稱,如 「A/B/C」 的JSP是在/ WEB-INF /頁/ A/B/C。 JSP。
這適用於JSP,但不能在views.xml中定義爲'a/b/c'的bean id;它不是有效的bean ID。 我們已經調查了,要麼不工作不理想幾種選擇:
- 把所有的JSP在一個文件夾中,這樣我們就可以使用,可以解決一個bean-ID命名兼容視圖名稱通過
XmlViewResolver
。這可行,但對組織我們的JSP並不理想。 - 有多個使用不同前綴的
InternalResourceViewResolver
定義。這只是不行;如果該類型的第一個解析器無法找到匹配的視圖,則它不會返回null,它只會失敗併產生異常,並且不會使用後續的ViewResolvers
。 - 使用單獨的控制器方法(或控制器中的條件代碼,根據請求的內容類型或URL後綴返回視圖名稱);這些解決方案似乎失敗了保持對其意見不知情的目的。
- 嘗試在XmlViewResolver的
location
屬性中使用通配符;這失敗了,但有一個例外。
我敢肯定,有一個很好的優雅的解決方案,但它正在逃避我剛纔。有沒有更好的方法,我可以返回一個視圖名稱,如'a/b/c',它有可能被XmlViewResolver解析?
謝謝你的任何建議。
理查德
你應該選擇你的答案作爲正確的答案。 – Paul