1

我一直在问自己这个问题已经有一段时间了,我还没有在网上找到一个很好的解决方案。

所以我使用 Tiles2 和 Spring MVC,我想在 body tile 中动态设置页面标题。有办法吗?

<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");

以及模板中的 ac:out

4

4 回答 4

4

瓷砖技术

如果“我想动态设置页面标题”是指“我想根据正在显示的图块设置页面标题,并且我想使用图块功能来做到这一点”,那么:

  1. 定义一个title属性;像这样: <put-attribute name="pageTitle" value="Title"/>
  2. 引用页面布局中的 pageTitle 属性;像这样:<title><tiles:getAsString property="pageTitle"/></title>
  3. 在任何重要的图块中设置 pageTitle 属性;<definition blah blah blah><put-attribute name="pageTitle" value="blah blah blah"/></definition>

可变技术

执行此技术的最简单方法是向模型添加属性并使用 el 表达式引用所述属性。例如,

您可以在控制器中执行此操作:

字符串页面标题;

pageTitle = "某事";
Model.add("PageTitle", pageTitle);

然后在您的页面中引用“PageTitle”属性,如下所示:

<头部>
<title>${PageTitle}</title>

您可以像这样使用 c:out:

<头部>
<title><c:out value="${PageTitle}"/></title>
于 2011-03-28T17:19:40.647 回答
1

这对我有用。有什么问题吗?

瓷砖:

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

JSP:

<span id="my-project-revision"><c:out value="${myProjectRevision}"/></span>
于 2011-08-03T14:40:05.107 回答
1

您还可以结合 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添加到您的模型对象)或两者兼而有之(我最喜欢的),你有一个静态的前半部分和一个动态的后半部分。

于 2013-01-10T21:50:23.050 回答
-2

瓷砖.xml:

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

JSP:

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

但是,如果您的应用程序只有一种语言,这只是一个很好的解决方案。

于 2011-03-29T09:48:24.737 回答