3

我将 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>

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

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

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

4

2 回答 2

1

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

在 template.jsp 文件中:

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

在您的 page.jsp(在您的情况下 - availability.jsp)中使用:

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

name = title,通过 value = PageTitle 设置页面标题。

额外的:

您可以将页面标题放在 messages.properties 文件中,然后像这样使用它:

<tiles:putAttribute name="title">
    <spring:message code="page.title"/>
</tiles:putAttribute>
于 2014-11-30T12:20:36.463 回答
0

如果availability.jsp 在layout.jsp 之后呈现,这是不可能的。如果您不能更改顺序,那么我建议使用javascript 来更新dom 中的title 元素。

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

于 2013-09-15T13:23:39.513 回答