2014-09-22 9 views
0

Я создал Spring MVC с проектом Tiles.Почему мы не должны использовать оба jspViewResolver и TilesViewResolver вместе?

Мой контроллер возвращает строку «hello», которая является логическим именем файла, и у меня есть jsp, называемый hello.jsp.

В файле tiles.xml У меня должно быть определение с именем hello, которое расширяет шаблон определения. Мое основное определение отображается на layout.jsp.

Когда я добавляю jspViewResolver, он принимает меня к hello.jsp, но если я прокомментирую это, он приведет меня к layout.jsp, который будет отображаться на основе определения hello в файле tiles.xml.

Итак, почему у нас не должно быть и jspViewResolver и tilesViewResolver вместе?

+1

Оба являются экземплярами «UrlBasedViewResolver», которые просто создают URL-адрес независимо от фактического существования запроса. Другие 'ViewResolver', такие как' BeanNameViewResolver', не возвращают представление, когда оно не существует. Имея несколько «UrlBasedViewResolver», ваша цепочка распознавателей сделает последние никогда не вызываемыми. Как поясняется в документации к классу. –

+0

Если бы вы поставили это как ответ, я бы выбрал это как лучший ответ. :) – user3705478

+0

Комментарий не был полностью правдивым, дал несколько более подробное объяснение. –

ответ

1

И TilesViewResolver, и InternalResourceViewResolver или экземпляры экземпляров UrlBasedViewResolver. В общем случае это означает, что ViewResolver берет данное имя представления и пытается создать URL-адрес из него. Этот URL-адрес используется для разрешения представления независимо от фактического существования представления.

В зависимости от версии Spring (Spring> = 3.0) и используемых подклассов будет проверяться фактическое наличие вида. (См. this решена проблема).

Единственная реализация, фактически не проверяющая существование видов (на данный момент), это InternalResourceViewResolver или простые UrlBasedViewResolver экземпляров. При использовании этого сделать это последнее (самое высокое свойство order) в цепочке распознавания.

Если вы хотите комбинировать простой JSP с плитками, это действительно возможно, если дать TilesViewResolver заказ 1 и InternalResourceViewResolver заказ выше, чем 1 (например, 2).

В более ранних версиях (весна < 3,0) эти проверки не установлены, и заказ не будет таким образом неэффективным.