【问题标题】:Thymeleaf apply different title-patternsThymeleaf 应用不同的标题模式
【发布时间】:2020-02-26 21:59:01
【问题描述】:

我正在使用最新版本的thymeleaf page layouts

我想为我的所有页面使用标题模式$CONTENT_TITLE - $LAYOUT_TITLE。因此,我创建了以下布局和内容文件。

我的layout.html 文件看起来像

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.w3.org/1999/xhtml">
<head>
    <title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">My Company Name</title>
    <!-- some scripts and styles --->
</head>
<body>
    <!-- some content --->
</body>
</html>

我的content.html 看起来像

<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.thymeleaf.org"
      layout:decorate="~{layout.html}">
<head>
    <title>
        <th:block th:if="${meta.pageTitle}" th:text="${meta.pageTitle}"></th:block>
    </title>
</head>
<body>
    <!-- some content --->
</body>
</html>

如果内容页面获得Newsletter 作为属性pageTitle 的值并且我在浏览器中调用内容页面,我会得到正确的结果:

<title>Newsletter - My Company Name</title>

如果我的内容页面没有标题,我只想在我的&lt;title&gt; 标记中显示$LAYOUT_TITLE,不带前导分隔符-。但是,我得到了我的代码

<title>- My Company Name</title>

我想要的是

<title>My Company Name</title>

我怎样才能以简单的方式实现这一目标?据我所知,我不能在 layout.html 中使用$CONTENT_TITLE 并检查它是否为空,或者我可以吗?

【问题讨论】:

    标签: java html spring spring-mvc thymeleaf


    【解决方案1】:

    由于我找不到为标题模式使用条件的方法,因此我不再使用此方法,而是按照this answer 中的建议使用可参数化片段。

    layout.html

    <!doctype html>
    <html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.w3.org/1999/xhtml">
    <head>
        <!-- some scripts and styles --->
    </head>
    <body>
        <!-- some content --->
    </body>
    </html>
    

    content.html

    <!doctype html>
    <html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.thymeleaf.org"
          layout:decorate="~{layout.html}">
    
    <head>
        <th:block th:replace="./fragments/page-title.html :: page-title('My Content Title')"></th:block>
    </head>
    
    <body>
        <!-- some content --->
    </body>
    </html>
    

    ./fragments/page-title.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head th:fragment="page-title(pageTitle)" th:remove="tag">
        <title th:text="(${pageTitle}? ${pageTitle} + ' - ' : '') + 'My Company Name'"></title>
    </head>
    </html>
    

    这会导致 &lt;title&gt;My Content Title - My Company Name&lt;/title&gt; 用于所有带有附加标题的页面,&lt;title&gt;My Company Name&lt;/title&gt; 用于所有没有附加标题的页面(例如我的起始页)。

    【讨论】:

      【解决方案2】:

      尝试简单地使您的 $CONTENT_TITLE 具有“Newsletter -”值,并在您的 layout.html 中放入以下行以获得新的标题模式:

      <title layout:title-pattern="$CONTENT_TITLE $LAYOUT_TITLE">My Company Name</title>
      

      【讨论】:

      • 这就是我想要避免的,因为我不想在每个页面上分别设置破折号“分隔符”。 - 应该只定义一次,如 My Company Name
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      相关资源
      最近更新 更多