使用tiles2和spring mvc动态设置页面标题

发布于 2024-10-27 06:36:39 字数 711 浏览 8 评论 0原文

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

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

<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

I've been asking myself this question for quite some time and I haven't found a nice solution for this on the web.

So I am using Tiles2 and Spring MVC and I'd like to set the page title dynamically within the body tile. Is there a way?

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

my current solution is setting the title within the controller

 model.addAttribute("pageTitle", "blubb");

and the doing a c:out in the template

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

任性一次 2024-11-03 06:36:39

平铺技术

如果“我想动态设置页面标题”的意思是“我想根据正在显示的平铺设置页面标题,并且我想使用平铺功能来完成此操作”,那么:

  1. 定义标题属性;像这样的东西:
  2. 在页面布局中引用 pageTitle 属性;像这样的东西:<tiles:getAsString property="pageTitle"/>
  3. 在任何重要的图块中设置 pageTitle 属性; <定义等等等等>

变量技术

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

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

String pageTitle;

pageTitle = "something";
Model.add("PageTitle", pageTitle);

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

<head>
<title>${PageTitle}</title>

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

<head>
<title><c:out value="${PageTitle}"/></title>

Tiles Technique

If by "I want to set the page title dynamically" you mean "I want to set the page title based on the tile that is being displayed and I want to use a tiles feature to do it" then:

  1. Define a title property; something like this: <put-attribute name="pageTitle" value="Title"/>
  2. Reference the pageTitle property in the layout for the page; something like this: <title><tiles:getAsString property="pageTitle"/></title>
  3. Set the pageTitle property in any tile that matters; <definition blah blah blah><put-attribute name="pageTitle" value="blah blah blah"/></definition>

Variable Technique

The simplest way to do this technique is to add an attribute to the model and to reference said attribute with an el expression. For example,

You might do this in your controller:

String pageTitle;

pageTitle = "something";
Model.add("PageTitle", pageTitle);

Then reference the "PageTitle" attribute in your page like this:

<head>
<title>${PageTitle}</title>

You can use c:out like this:

<head>
<title><c:out value="${PageTitle}"/></title>
灵芸 2024-11-03 06:36:39

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

瓷砖:

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

JSP:

<span id="my-project-revision"><c:out value="${myProjectRevision}"/></span>

This is working for me. Is there anything wrong with it?

TILES:

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

JSP:

<span id="my-project-revision"><c:out value="${myProjectRevision}"/></span>
懒猫 2024-11-03 06:36:39

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

You can also combine DwB's two answers so you get the best of both worlds:

<title>
    <tiles:insertAttribute name="title" ignore="true" />
    <c:if test="${not empty pageTitle}">
        <c:out value="${pageTitle}"></c:out>
    </c:if>
</title>

Useful when you want some pages to have static titles (so you only need to set it in the tiles.xml file), some pages to have fully dynamic titles (don't set anything in tiles.xml, just add pageTitle to your model object) or a bit of both (my favourite) where you have a static first half and a dynamic second half.

一向肩并 2024-11-03 06:36:39

tiles.xml:

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

JSP:

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

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

tiles.xml:

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

JSP:

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

But this is only a good solution if your application has only one language.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文