Чебрець: Об’єднання - не вдалося проаналізувати як вираз


83

У мене виникла проблема при спробі об'єднати кілька значень у моєму шаблоні. Відповідно до Thymeleaf тут, я просто мав би змогу їх + разом ...

4.6 КОКАТАНТУЮЧІ ТЕКСТИ

Тексти, незалежно від того, є вони літералами чи результатом обчислення виразів змінних чи повідомлень, можна легко об’єднати за допомогою оператора +:

th:text="'The name of the user is ' + ${user.name}"

Ось приклад того, що я знайшов:

<p th:text="${bean.field} + '!'">Static content</p>

Однак це не означає:

<p th:text="${bean.field} + '!' + ${bean.field}">Static content</p>

Логічно, це повинно працювати, але ні, що я роблю не так?


Мейвен:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring3</artifactId>
    <version>2.0.16</version>
    <scope>compile</scope>
</dependency>

Ось як я встановив свої TemplateEngine і TemplateResolver:

<!-- Spring config -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ClassLoaderTemplateResolver">
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML5"/>
    <property name="characterEncoding" value="UTF-8"/>
    <property name="order" value="1"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
    <property name="templateResolver" ref="fileTemplateResolver"/>
    <property name="templateResolvers">
        <list>
            <ref bean="templateResolver"/>
        </list>
    </property>

Сервіс:

@Autowired private TemplateEngine templateEngine;
.....
String responseText = this.templateEngine.process(templateBean.getTemplateName(), templateBean.getContext());

AbstractTemplate.java:

public abstract class AbstractTemplate {
  private final String templateName;
  public AbstractTemplate(String templateName){
    this.templateName=templateName;
  }
  public String getTemplateName() {
    return templateName;
  }
  protected abstract HashMap<String, ?> getVariables();
  public Context getContext(){
    Context context = new Context();
    for(Entry<String, ?> entry : getVariables().entrySet()){
      context.setVariable(entry.getKey(), entry.getValue());
    }
    return context;
  }
}

у мене така сама помилка !!!!!!!!!! але я використовую чебрець та

Єдиний спосіб, яким мені вдалося змусити це працювати, - це використання попередньої обробки. <p th:text="${'__${bean.property1}__' + '::' + '__${bean.property2}__'}">default text</p>
NeilA

Цей приклад працює для мене. Який варіант чебрецю ви використовуєте? Чи використовуєте ви якісь додаткові діалекти?
hubbardr

Відповіді:


199

Але з того, що я бачу, у вас є досить проста помилка в синтаксисі

<p th:text="${bean.field} + '!' + ${bean.field}">Static content</p>

виглядав би правильний синтаксис

<p th:text="${bean.field + '!' + bean.field}">Static content</p>

По суті, синтаксис th:text="'static part' + ${bean.field}"дорівнює th:text="${'static part' + bean.field}".

Спробуй. Незважаючи на те, що це, мабуть, зараз марно через 6 місяців.


Дякую, корисно для мене.
asifaftab87

23
Даремно через 6 місяців ?, Це все ще корисно через 6 років
AguThadeus

32

Ви можете поєднати багато видів виразів, обставивши свій простий / складний вираз між ||символами:

<p th:text="|${bean.field} ! ${bean.field}|">Static content</p>

Я використовую версію Thymeleaf: 2.1.1. ВИПУСК (це має бути остання версія)
Фернандо Аспіазу

Чудово працює на версії2.1.5
Тьяго Перейра

1
Що робити, якщо текст містить |? Наприклад. "|${fullName} Stories \| Twiza|"Я отримую Не вдалося проаналізувати як вираз.
Піюш

як це зробити тут, це не спрацювало, чи можете ви перетворити його на ваш синтаксис ... th:class="'hotel listing col organic urgencyMsg available organic h-' + ${record.hotelInfo.hotelId} + '-organic'"> я використовую3.0.2
shareef

1
Для використання вертикальної смуги (|) у тексті:<p>[[${fullName}]] Stories | Twiza </p>
ranjan

3

Зверніть увагу, що за допомогою | char, ти можеш отримати попередження за допомогою IDE, наприклад я отримую попередження з останньою версією IntelliJ, тому найкращим рішенням є використання цього синтаксису:

th:text="${'static_content - ' + you_variable}"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.