Spring + Tiles: установите заголовок страницы из представления

Я использую Spring MVC 3 с плитками Apache 3.

Я хочу добавить собственный заголовок для одной из моих страниц. Я хочу, чтобы этот заголовок жил в конкретном представлении jsp, а не в макете jsp.

Вот что я делаю:

Определение в файлеtiles.xml

<definition name="availability" extends="base.definition">
    <put-attribute name="title" expression="${requestScope.title}"/>
    <put-attribute name="page" value="/WEB-INF/views/availability.jsp" />
</definition>

Вот доступность.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="title" value="Availability" scope="request"/>

Вот layout.jsp (используется base.definition)

<title>App::<tiles:getAsString name='title' /></title>

Это приводит к исключению нулевого указателя в слое плиток при рендеринге атрибута.

Я могу установить заголовок через модель, когда запрос поступает на мой контроллер, как было предложено здесь, но я хотел бы сделать это из представления JSP, а не из контроллера.

Похоже, что тайлы составляют и отображают страницы, это невозможно. Это правильно?


person singhspk    schedule 14.09.2013    source источник


Ответы (2)


Это невозможно, если доступность.jsp отображается после layout.jsp. Если вы не можете изменить порядок, я бы предложил использовать javascript для обновления элемента заголовка в dom.

В противном случае вам следует попытаться инкапсулировать шаблон и его значения. То есть элемент title должен находиться в шаблоне с именем title.jsp (или head.jsp), и вы используете определенный title.jsp для каждого запроса. (вам не нужно отдельное определение для каждого отдельного title.jsp!)

person mck    schedule 15.09.2013

Вот как вы можете использовать собственный заголовок (это работает для всех страниц, которые используют плитки):

В файле template.jsp:

<title><tiles:insertAttribute name="title" /></title>

В вашем page.jsp (в вашем случае -availability.jsp) используйте это:

<tiles:putAttribute name="title" value="PageTitle" />

name = title, устанавливает заголовок вашей страницы по значению = PageTitle.

Дополнительно:

вы можете поместить заголовки своих страниц в файл messages.properties, а затем использовать его следующим образом:

<tiles:putAttribute name="title">
    <spring:message code="page.title"/>
</tiles:putAttribute>
person zygimantus    schedule 30.11.2014