95

尝试在模板中连接多个值时遇到问题。根据这里的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>

ThymeleafTemplatingService:

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

抽象模板.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;
  }
}
4

4 回答 4

231

但据我所知,您在语法上有一个非常简单的错误

<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 个月后现在可能有点没用了。

于 2013-10-18T12:15:30.650 回答
35

您可以通过在字符之间环绕您的简单/复杂表达式来连接多种表达式||

<p th:text="|${bean.field} ! ${bean.field}|">Static content</p>
于 2013-12-15T00:19:18.780 回答
6

请注意,使用 | char,您的 IDE 会收到警告,例如我会收到 IntelliJ 最新版本的警告,因此最好的解决方案是使用以下语法:

th:text="${'static_content - ' + you_variable}"
于 2019-01-27T23:08:06.443 回答
4

我们可以像这样 concat :


<h5 th:text ="${currentItem.first_name}+ ' ' + ${currentItem.last_name}"></h5>
于 2019-07-19T07:54:38.340 回答