Thymeleaf:串联-无法解析为表达式


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>

从逻辑上讲,这应该可以,但是不能,我在做什么错?


Maven:

<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>

ThymeleafTemplatingService:

@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 2013年

这个例子对我有用。您使用什么版本的百里香叶?您还在使用其他方言吗?
hubbardr

Answers:


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.RELEASE(应该是最新版本)
Fernando Aspiazu 2013年

在版本上效果很好2.1.5
Thiago Pereira

1
如果文本包含|怎么办?例如。"|${fullName} Stories \| Twiza|"我越来越无法解析为表达式。
Piyush

如何在这里做它没有用,您可以将其转换为语法吗? 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}"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.