是否可以使用不同的视图解析器?

tan*_*bee 47 java birt spring-mvc

我在Spring配置中有多个视图解析器,并希望为不同的请求使用不同的视图解析器.

示例:对于以...开头的URL report_*,使用Birt视图解析器,对于ajax调用,使用Tiles解析器等.

尝试设置订单属性,但所有视图都由解析tilesViewResolver.

<beans:bean id="tilesViewResolver" class="org.springframework.js.ajax.AjaxUrlBasedViewResolver">
    <beans:property name="viewClass" value="com.example.example.util.AjaxTiles21View"/>
</beans:bean>

<beans:bean id="birtViewResolver" class="org.eclipse.birt.spring.core.BirtViewResolver">
    ...
    <beans:property name="order" value="2" />
</beans:bean>

<beans:bean id="beanNameResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
    <beans:property name="order" value="1" />
</beans:bean>
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 41

你绝对可以.ViewResolver有一个方法,resolveViewName(String)返回

View对象,如果未找到则为null(可选,允许ViewResolver链接)

你的ViewResolver豆子已经注册了.当处理程序返回视图名称时,Spring将遍历每个视图名称ViewResolver,resolveViewName并使用给定名称调用其方法.如果该方法返回non -null,View则使用该方法.如果null返回,则继续迭代.

因此,null如果Spring要跳过它,则必须返回实现.

有些实现永远不会返回null.您的自定义ViewResolver类似乎就是这种情况.如果ViewResolver返回a View,即使View最终无法呈现,Spring也会使用它.

您需要修复它或订购您的ViewResolverbean.例如,您可以使用Ordered界面订购它们.让您的类实现该接口并返回适当的值.

  • @tangobee Just FYI:如果删除空格,`@ name`的工作更可靠,例如`@ SotiriosDelimanolis`.在这种情况下,没关系,因为如果你回答那个留下答案的人你不需要`@ name`.在大多数情况下,软件会试图根据谁做出回应来猜测你的意思,因为它会忽略"德里曼波利斯"部分,因为它是在一个空间之后.至少,这就是我理解它的方式. (2认同)
  • @mhm 如果它们是明确的。老实说,我只是输入@,开始绑定,当我只看到一个名字时,我按 Tab。 (2认同)