c: импорт загружает вид, отличный от указанного в тайлах - PullRequest
2 голосов
/ 08 июля 2011

Использование:

  • Spring Web 3.0.5
  • JSTL 1.2.0
  • Apache Tiles 2.1.4
  • Смола 3.1.9

template1: импортирует jsp для url1
main jsp: import / my / simple / url2 импортированная страница jsp: jsp без импорта и не включает

плитка: логическое представление для url1: url1.view (расширяет tempate1)
логическое представление для url2: url2.view (является страницей jsp)

Теперь вот что происходит:
При доступе к / my / simple / url1: идет к контроллеру и команде, которая затем приводит к рендеринг шаблона (template1), который импортирует основной JSP
При просмотре импорта для / my / simple / url2 отправляет запрос на этот URL Это, в свою очередь, переходит к другому контроллеру с помощью другой команды и отображает другой jsp (aka: import jsp)

После выполнения контроллера для url2 я ожидаю, что url2.view будет обработан и добавлен в основной jsp. Но вместо этого снова отображается template1, что приводит к циклу.

Кто-нибудь сталкивался с этой проблемой раньше? Я не совсем уверен, что происходит.

Ответы [ 2 ]

0 голосов
/ 05 мая 2014

У меня была та же проблема, и я решил ее с помощью абсолютного URI плитки. Это вызывает «чистый» запрос к серверу и не знает о текущей визуализации плитки.

Я использовал импорт, потому что мне требовался более динамический URL.

Итак, для примера:

<c:import url="/path/to/the/import/jsp/or/controller"/>

становится

<c:import url="http://localhost:8080/mycontext/path/to/the/import/jsp/or/controller" />

Конечно, вам нужно обновить baseURI в соответствии с вашей ситуацией.

Это позволило избежать рекурсии при объединении плиток с c: import

Осторожно: запускает новый HTTP-запрос к вашему серверу.

0 голосов
/ 05 ноября 2013

Хорошо, поэтому я не уверен, что это будет работать для более ранних версий Tiles и Spring (в настоящее время используются Spring 3.1 и Tiles 2.2.2), но здесь все равно идет.

Я понял, что по какой-то причине, когда вы выполняете импорт с использованием библиотеки основных тегов в шаблоне плиток, и, скажем, импорт, в свою очередь, вызывает контроллер Spring MVC, это вызовет бесконечный цикл.Чтобы обойти это, я сделал следующее:

  • Добавьте атрибут в определение плиток макета, который будет ссылаться на jsp, содержащий код для импорта.Скажем, например:

    <definition name="cti.layouts.fooBarLayout" template="/WEB-INF/views/layouts/foo-bar-layout.jsp"> <put-attribute name="body" value="/WEB-INF/views/some-body.jsp"/> <put-attribute name="foo" value="/WEB-INF/views/my-import.jsp"/> </definition>

В этом примере вы хотите добавить код импорта в my-import.jsp.Вы можете использовать базовый тег JSTL <c:import>

  • Внутри foo-bar-layout.jsp добавьте тег tile: insertAttribute туда, куда вы хотите, чтобы эта импортированная страница шла.Ссылка на имя атрибута (в данном случае 'foo'):

    <tiles:insertAttribute name="foo"/>

Теперь вы можете расширять этот макет, не заботясь о бесконечном цикле.Не уверен, почему это работает, поскольку я не понимаю, что делает базовая реализация, но по какой-то причине плитки не позволяют использовать динамический импорт внутри страницы шаблона.

Надеюсь, это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...