我正在使用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中而不是控制器中执行此操作。
看起来,瓷砖组成和呈现页面的方式,这是不可能的。是对的吗?
答案 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单独定义!)