具有多个视图解析器的Spring MVC

我尝试使用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="0" />

</bean>

</beans>

该应用程序始终仅使用顺序最低的一个,而不使用另一个。在当前情况下,如果我的控制器返回“ someView”,则The requested resource (/MyProject/WEB-INF/views/someView.jsp) is not available.即使存在“ pages / someView.xhtml” ,应用也会响应。

Spring version - 3.2.3

编辑:如果我在控制器中有2个方法,并且methodA返回“ viewA”,而methodB返回“ viewB”。我们在“ views”文件夹中有viewA.jsp,在“ pages”中有viewB.xhtml。

情况1:UrlBasedViewResolver-> order = 1,InternalResourceViewResolver-> order = 2

methodA-> The requested resource (/MyProject/WEB-INF/pages/viewA.xhtml) is not available.;

methodB -> OK

情况2:UrlBasedViewResolver-> order = 2,InternalResourceViewResolver-> order = 1

方法A->确定;

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

回答:

我认为你误解了订单优先级。该ViewResolver最高顺序是链中最后一个解析器。由于你给的InternalResourceViewResolver订单是0,因此它将成为链中的第一个解析器,并且InternalResourceViewResolver无论返回什么视图名称,都会解析该视图。因此,如果要使用多个解析器,则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)。两个解析器始终与返回值匹配。我认为你将需要一些自定义功能才能执行此操作。

以上是 具有多个视图解析器的Spring MVC 的全部内容, 来源链接: utcz.com/qa/415585.html

回到顶部