Механизм шаблонов Thymeleaf — ошибка не удается использовать выражение предварительной обработки (__ $ {expression} __)

#java #kotlin #thymeleaf #template-engine

#java #kotlin #thymeleaf #механизм шаблонов

Вопрос:

Я получил такую ошибку, когда попытался использовать выражение предварительной обработки?
Кто-нибудь знает, как разрешить использование выражения предварительной обработки в движке шаблонов Thymeleaf?

Я думаю, что, возможно, я пропустил некоторые конфигурации с движком шаблонов, поэтому он выдал эту ошибку.

Существуют ли какие-либо конфигурации, которые необходимо добавить, чтобы заставить его работать? или какой-либо обходной путь?

Вот примеры HTML-кодов и кодов Thymeleaf, которые я пытался использовать:

 <li class="list-item" th:each="item : ${data.getApps(__${ids}__)}">
    <a th:text="${item.appName}">App Name</a>
</li>
 

Вот ошибка:

 Caused by: org.springframework.expression.spel.SpelParseException: Expression [data.getApps(__${ids}__)] @27: EL1043E: Unexpected token. Expected 'rparen())' but was 'lcurly({)'
 

Комментарии:

1. Было бы полезно, если бы вы предоставили фактический код, который вызывает ошибку. Без этого мы не можем сказать, где и почему возникает проблема.

2. @SeverityOne Я добавил код, пожалуйста, взгляните на него. На самом деле, я думаю, что этот код был в порядке, но могут быть некоторые проблемы, о которых я не знаю на стороне сервера.

Ответ №1:

Это помогло бы иметь базовый компонент, из которого извлекаются данные, но вы добавляете бизнес-логику в свою логику представления, что никогда не является хорошей идеей. ${ids} это какая-то переменная, исходящая из компонента, поэтому я бы создал метод getApps() , который выглядит следующим образом:

 public Collection<App> getApps() {
    return getData(getIds());
}
 

а затем измените свой шаблон Thymeleaf следующим образом:

 <li class="list-item" th:each="item: ${apps}">
    <a th:text="${item.appName}">App Name</a>
</li>
 

Пожалуйста, обратите внимание, что я должен угадать, как выглядит Java-код, так что это, скорее всего, будет неточно.