Spring + Tiles:从视图中设置页面标题

时间:2013-09-14 14:10:10

标签: jsp spring-mvc apache-tiles

我正在使用Spring MVC 3和Apache Tiles 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>

这是availability.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>

这会在渲染属性时导致切片图层中出现空指针异常。

当请求按照建议here发送到我的控制器时,我可以通过模型设置标题,但我想在视图JSP中而不是控制器中执行此操作。

看起来,瓷砖组成和呈现页面的方式,这是不可能的。是对的吗?

2 个答案:

答案 0 :(得分:1)

这是你可以使用自定义标题的方法(它适用于使用图块的所有页面):

在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>

答案 1 :(得分:0)

如果在layout.jsp之后呈现availability.jsp,则无法执行此操作 如果您无法更改订单,那么我建议使用javascript更新dom中的title元素。

否则,您应该考虑封装模板及其值。 也就是说,“title”元素应该在名为title.jsp(或head.jsp)的模板中,并且您为每个请求使用特定的title.jsp。   (你不需要为每个不同的title.jsp单独定义!)