Динамическая установка заголовка страницы с помощью плитки2 и spring mvc

Я задавал себе этот вопрос довольно давно, и я не нашел хорошего решения для этого в Интернете.

Итак, я использую Tiles2 и Spring MVC, и я хотел бы динамически установить заголовок страницы в плитке тела. Есть ли способ?

<definition name="mainTemplate" template="/WEB-INF/template/main.jsp">
 <put-attribute name="header" value="/WEB-INF/template/header.jsp" />
 <put-attribute name="footer" value="/WEB-INF/template/footer.jsp" />
 <put-attribute name="body" value="/WEB-INF/template/blank.jsp" />
</definition>

<definition name="list" extends="mainTemplate">
 <put-attribute name="body" value="/WEB-INF/jsp/list.jsp" />
</definition>

мое текущее решение устанавливает заголовок в контроллере

 model.addAttribute("pageTitle", "blubb");

и выполнение c:out в шаблоне


person suicide    schedule 28.03.2011    source источник


Ответы (4)


Техника плитки

Если под «Я хочу установить заголовок страницы динамически» вы имеете в виду «Я хочу установить заголовок страницы на основе отображаемой плитки, и я хочу использовать для этого функцию плитки», тогда:

  1. Определите свойство заголовка; примерно так: ‹put-attribute name="pageTitle" value="Title"/›
  2. Ссылка на свойство pageTitle в макете страницы; примерно так: ‹title›‹tiles:getAsString property="pageTitle"/›‹/title›
  3. Установите свойство pageTitle в любой плитке, которая имеет значение; ‹определение бла-бла-бла›‹put-attribute name="pageTitle" value="бла-бла-бла"/›‹/definition›

Переменная техника

Самый простой способ использовать эту технику — добавить атрибут в модель и сослаться на этот атрибут с помощью выражения el. Например,

Вы можете сделать это в своем контроллере:

String pageTitle;

pageTitle = "something";
Model.add("PageTitle", pageTitle);

Затем укажите атрибут «PageTitle» на своей странице следующим образом:

<head>
<title>${PageTitle}</title>

Вы можете использовать c:out следующим образом:

<head>
<title><c:out value="${PageTitle}"/></title>
person DwB    schedule 28.03.2011
comment
Извините, я должен был быть более ясным об этом. Ваше решение работает, если я точно знаю, каким должен быть заголовок перед выполнением. Но мне нравится менять заголовок в зависимости от контента, который извлекается контроллером. Есть ли способ сделать это из плитки содержимого? - person suicide; 29.03.2011
comment
вы можете вызвать динамическое значение для заголовка в классе pageTitle из базы данных в приведенном выше примере вместо жестко закодированного значения, я думаю. - person Dev; 21.09.2016

Это работает для меня. Что-то не так с этим?

ПЛИТКА:

<put-attribute name="myProjectRevision" value="1.0" type="string" />

JSP:

<span id="my-project-revision"><c:out value="${myProjectRevision}"/></span>
person ben.smithlea    schedule 03.08.2011

Вы также можете объединить два ответа DwB, чтобы получить лучшее из обоих миров:

<title>
    <tiles:insertAttribute name="title" ignore="true" />
    <c:if test="${not empty pageTitle}">
        <c:out value="${pageTitle}"></c:out>
    </c:if>
</title>

Полезно, когда вы хотите, чтобы некоторые страницы имели статические заголовки (поэтому вам нужно только установить их в файлеtiles.xml), некоторые страницы имели полностью динамические заголовки (не устанавливайте ничего вtiles.xml, просто добавьте pageTitle в свою модель объект) или немного того и другого (мой любимый), где у вас есть статическая первая половина и динамическая вторая половина.

person simonlord    schedule 10.01.2013
comment
Я думаю, что это лучшее решение из них, но все же... размещение кода представления в контроллере не кажется мне лучшим решением. - person checklist; 17.03.2013

плитки.xml:

<definition ... >
    ...
    <put-attribute name="title" value="My Title" />
</definition>

JSP:

<h1><tiles:getAsString name="title"/></h1>

Но это хорошее решение только в том случае, если ваше приложение имеет только один язык.

person sinuhepop    schedule 29.03.2011