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

同じエラーが発生しました!!!!!!!!!! しかし、私はthymeleafとscalaを使用しています

私がそれを機能させることができた唯一の方法は、前処理を使用することです。<p th:text="${'__${bean.property1}__' + '::' + '__${bean.property2}__'}">default text</p>
neilA 2013

この例は私のために働きます。どのバージョンのthymeleafを使用していますか?追加の方言を使用していますか?
hubbardr 2013

回答:


202

しかし、私が見たところ、構文に非常に単純なエラーがあります

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

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
チアゴペレイラ

1
テキストに|が含まれている場合はどうなりますか?例えば。"|${fullName} Stories \| Twiza|"式として解析できませんでした。
Piyush 2017

ここでそれを行う方法それは機能しませんでしたあなたはそれをあなたの構文に変換できますか...th:class="'hotel listing col organic urgencyMsg available organic h-' + ${record.hotelInfo.hotelId} + '-organic'"> 使用しています 3.0.2
shareef 2017年

1
テキストで垂直バー(|)を使用する場合:<p>[[${fullName}]] Stories | Twiza </p>
ranjan 2017年

4

|で注意してください char、IDEで警告を受け取ることができます。たとえば、IntelliJの最後のバージョンで警告を受け取るので、次の構文を使用するのが最善の解決策です。

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

1

私たちはこのように連結することができます:


<h5 th:text ="${currentItem.first_name}+ ' ' + ${currentItem.last_name}"></h5>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.