Считать значение атрибута html из фрагмента Thymeleaf - PullRequest
0 голосов
/ 24 апреля 2019

Я использую thymeleaf в качестве движка шаблонов в веб-приложении Java - Spring, которое уже является законченным веб-сайтом, и сейчас я работаю над тем, чтобы ввести в заголовок несколько тегов оптимизировать взаимодействие с платформами социальных сетей.

Моя цель - как можно меньше изменить код шаблонов и обеспечить некоторую гибкость в отношении значений, которые входят в содержимое тегов.

Прямо сейчас шаблоны структурированы следующим образом:

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'}">

Идея состоит в том, чтобы использовать селекторы фрагментов, чтобы выбрать правильный контент для вставки из шаблона страницы, этоНа странице я могу просто пометить тег (возможно, div, абзац, что-то релевантное для этого шаблона) с помощью th: ref = "og_description" , и его значение станет content тега в голове.

Это действительно хорошо работает для тегов og_title и og_description , но проблема возникает с og:image метатег, в который мне нужно вставить значение атрибута src тега image, помеченного th: ref = "og_image" .

Я не смог найти способ прочитать значение атрибута из фрагмента, Есть ли способ сделать это? .

Я вижу, что выбранный фрагментна самом деле это экземпляр org.thymeleaf.standard.expression.Fragment , но я не вижу ни одного метода, который можно использовать для доступа к атрибутам html в нем.

Если это технически невозможно, есть ли лучший подход к этому варианту использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...