从Thymeleaf片段中读取html属性值

时间:2019-04-24 09:41:22

标签: java templates thymeleaf

我正在使用百里香叶作为Java-Spring Web应用程序的模板引擎,该Web应用程序已经是一个完整的网站,我现在正在工作的是在标头中引入一些 标签优化与社交网络平台的互动。

我的目标是尽量减少对模板代码的修改,并使标签内容中的值具有一定的灵活性。

现在,模板的结构如下:

Layout.html ,其中包含一些头部和身体的片段。

<head th:fragment="common_head(title, links, scripts)" th:assert="${!#strings.isEmpty(title)}">
...
</head>

<body th:fragment="common_body(content, body_end)">
...
</body>

实际页面的模板是这样的。

<head th:replace="common/layout :: common_head(~{:: head/title}, ~{}, ~{:: head/script})">
    <title>My page title</title>
    <script>
        console.log('some page specific JS code');
    </script>
    ...
</head>
<body th:replace="common/layout :: common_body(~{ :: body/content }, ~{ :: body/bottom })">
    <div class="wrapper" th:fragment="content">
        some content here
    </div>
    <th:block th:fragment="bottom">
        more content here
    </div>
</body>

我知道我可以在 common_head 片段中添加另一个参数,并将标记传递给它,就像我对标题,脚本等进行的操作一样。但是我在考虑另一个这种方法将减少重复代码以将值注入标头的过程。

在布局 common_head 片段中,我有以下内容:

<meta property="og:title"       th:with="og_value = ~{this :: %og_title/text()}"       th:content="${og_value ne null ? og_value : 'Lorem ipsum'}">
<meta property="og:description" th:with="og_value = ~{this :: %og_description/text()}" th:content="${og_value ne null ? og_value : 'Lorem ipsum'}">
<meta property="og:image"       th:with="og_value = ~{this :: %og_image}"              th:content="${og_value ne null ? og_value : 'path-to-default-img'}">

这个想法是使用片段选择器从页面模板中选择合适的内容进行注入,这样我就可以在页面中用 th:ref =“ og_description” ,其值将成为头部标签的 content

这对于 og_title og_description 标记确实非常有效,但是问题出在 og:image 元标记中,我需要注入标记有 th:ref =“ og_image” 标记的 src 属性的值。

我找不到从片段中读取属性值的任何方法,有没有办法做到这一点?

我可以看到所选片段实际上是org.thymeleaf.standard.expression.Fragment的一个实例,但是我看不到可用于访问其中的html属性的任何方法。

如果这在技术上不可行,那么有没有更好的方法可以解决此用例?

0 个答案:

没有答案