java - 是否可以使用不同的 View 解析器?

标签 java spring-mvc birt

我在 Spring 配置中有多个 View 解析器,并希望对不同的请求使用不同的 View 解析器。

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

尝试设置 order 属性,但所有 View 都由 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>

最佳答案

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

the View object, or null if not found (optional, to allow for ViewResolver chaining)

您的 ViewResolver bean 已注册。当处理程序返回 View 名称时,Spring 将遍历每个 ViewResolver,并使用给定名称调用它们的 resolveViewName 方法。如果该方法返回非-null,则使用该View。如果返回null,则继续迭代。

所以如果 Spring 要跳过它,实现必须返回 null

有些实现永远不会返回 null。您的自定义 ViewResolver 类似乎就是这种情况。如果ViewResolver返回一个View,即使那个View最终会渲染失败,Spring也会使用它。

您要么需要解决这个问题,要么订购 ViewResolver bean。例如,您可以使用 Ordered 界面对它们进行排序。让您的类实现该接口(interface)并返回适当的值。

关于java - 是否可以使用不同的 View 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091791/

相关文章:

java - 没有这样的方法错误:

java - 如何在运行时语言 (Java) 中向 Birt 中插入图像

java - 数组字符串方法返回多个字符串方法

java - Intellij 中的模拟不会忽略模拟类中的编译错误?

java - 如何将下面的 java 查询放入 switch case 中?

java - 在部署时从 javax.validation 库获取 NoSuchMethodError

java - 在 Spring MVC 中更改过滤器类中的语言环境

java - BIRT - 我应该将图像放在哪里,以便可以预览并部署到 Web 应用程序中

java - Eclipse birt 无法建立与 derby 数据库的连接

Java 和 MapStruct