Можно ли использовать разные разрешения представления?

У меня есть несколько представлений в конфигурации Spring и вы хотите использовать разные разрешения для разных запросов.

Пример. Для URL-адресов, начинающихся с report_*, используйте распознаватель вида Birt, а для вызовов ajax используется Tiles resolver и т.д.

Пробовал свойство порядка настройки, но все представления разрешены 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>

Ответ 1

Вы абсолютно можете. ViewResolver имеет единственный метод resolveViewName(String), который возвращает

объект View или null, если не найден (необязательно, чтобы включить цепочку ViewResolver)

Зарегистрированы ваши ViewResolver beans. Когда имя представления возвращается обработчиком, Spring выполняет итерацию через каждый ViewResolver, вызывая их метод resolveViewName с заданным именем. Если метод возвращает non -null, используется View. Если возвращается null, он продолжает итерацию.

Таким образом, реализация должна вернуть null, если Spring - это пропустить.

Есть несколько реализаций, которые никогда не возвращаются null. Это похоже на ваши пользовательские классы ViewResolver. Если ViewResolver возвращает a View, даже если этот View в конечном итоге не будет отображаться, Spring будет использовать его.

Вам нужно либо исправить это, либо заказать ViewResolver beans. Например, вы можете заказать их с помощью интерфейса Ordered. Попросите ваши классы реализовать этот интерфейс и вернуть соответствующее значение.