gpt4 book ai didi

具有多个 View 解析器的 Spring MVC

转载 作者:行者123 更新时间:2023-12-04 13:40:24 27 4
gpt4 key购买 nike

我尝试使用 2 个 View 解析器:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<context:component-scan base-package="com.evgeni.dfr.controller" />

<context:annotation-config />
<mvc:annotation-driven />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="cache" value="false" />
<property name="viewClass" value="com.evgeni.drf.faces.FacesView" />
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".xhtml" />

<property name="order" value="1" />
</bean>

<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="order" value="0" />
</bean>
</beans>

应用程序总是只使用最低阶的一个,而不使用另一个。在当前情况下,如果我的 Controller 返回“someView”,应用程序将响应 The requested resource (/MyProject/WEB-INF/views/someView.jsp) is not available.即使有“pages/someView.xhtml”。

Spring 版本 - 3.2.3

编辑:
如果 Controller 中有 2 个方法,方法 A 返回“viewA”,方法 B 返回“viewB”。我们在“views”文件夹中有viewA.jsp,在“pages”中有viewB.xhtml。

Case1: UrlBasedViewResolver -> order=1,InternalResourceViewResolver -> order=2

方法A -> The requested resource (/MyProject/WEB-INF/pages/viewA.xhtml) is not available. ;
methodB -> OK

Case2: UrlBasedViewResolver -> order=2,InternalResourceViewResolver -> order=1

方法A->确定;
methodB -> `The requested resource (/MyProject/WEB-INF/views/viewB.jsp) is not available.`;

最佳答案

我认为您误解了订单优先级。 ViewResolver最高阶是链中的最后一个解析器。既然你给了 InternalResourceViewResolver 0的订单,它将是链中的第一个解析器和 InternalResourceViewResolver无论返回什么 View 名称,都将解析 View 。所以,如果你想要多个解析器,InternalResourceViewResolver必须是最高阶的解析器。

更改 InternalResourceViewResolver订单值到 2 :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<context:component-scan base-package="com.evgeni.dfr.controller" />

<context:annotation-config />
<mvc:annotation-driven />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="cache" value="false" />
<property name="viewClass" value="com.evgeni.drf.faces.FacesView" />
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".xhtml" />
<property name="order" value="1" />
</bean>

<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="order" value="2" />
</bean>
</beans>

编辑:

检查javadoc后,这两个解析器似乎无法链接,因为 InternalResourceViewResolverUrlBasedViewResolver (InternalResourceViewResolver 扩展了 UrlBasedViewResolver)。两个解析器始终匹配返回值。我认为你需要一些定制的东西才能做到这一点。

关于具有多个 View 解析器的 Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com