Thymeleaf: Verkettung - Konnte nicht als Ausdruck analysiert werden


82

Ich habe ein Problem beim Versuch, mehrere Werte in meiner Vorlage zu verknüpfen. Laut Thymeleaf hier sollte ich einfach in der Lage sein, sie zusammen zu machen ...

4.6 KONKATENIERENDE TEXTE

Texte, unabhängig davon, ob es sich um Literale oder das Ergebnis der Auswertung von Variablen- oder Nachrichtenausdrücken handelt, können mit dem Operator + einfach verkettet werden:

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

Hier ist ein Beispiel für das, was ich gefunden habe:

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

Dies jedoch nicht:

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

Logischerweise sollte dies funktionieren, aber es ist nicht so, was mache ich falsch?


Maven:

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

So habe ich meine TemplateEngine und TemplateResolver eingerichtet:

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

Ich habe den gleichen Fehler aufgetreten !!!!!!!!!! aber ich benutze Thymeleaf und Scala

Der einzige Weg, wie ich es geschafft habe, ist die Vorverarbeitung. <p th:text="${'__${bean.property1}__' + '::' + '__${bean.property2}__'}">default text</p>
NeilA

Dieses Beispiel funktioniert für mich. Welche Version von Thymeleaf verwenden Sie? Verwenden Sie zusätzliche Dialekte?
Hubbardr

Antworten:


198

Aber soweit ich sehe, haben Sie einen recht einfachen Syntaxfehler

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

Die richtige Syntax würde so aussehen

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

Tatsächlich ist die Syntax th:text="'static part' + ${bean.field}"gleich th:text="${'static part' + bean.field}".

Versuch es. Auch wenn dies jetzt nach 6 Monaten wahrscheinlich irgendwie nutzlos ist.


Danke, hilfreich für mich.
Asifaftab87

23
Nach 6 Monaten nutzlos?, 6 Jahre später ist es immer noch nützlich
AguThadeus

32

Sie können viele Arten von Ausdrücken zusammenfassen, indem Sie Ihren einfachen / komplexen Ausdruck zwischen ||Zeichen umschließen :

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

Ich benutze Thymeleaf Version: 2.1.1.RELEASE (es sollte die letzte Version sein)
Fernando Aspiazu

Funktioniert hervorragend in der Version2.1.5
Thiago Pereira

1
Was ist, wenn Text | enthält? Zum Beispiel. "|${fullName} Stories \| Twiza|"Ich bekomme Konnte nicht als Ausdruck analysieren.
Piyush

Wie es hier gemacht wird, hat es nicht funktioniert. th:class="'hotel listing col organic urgencyMsg available organic h-' + ${record.hotelInfo.hotelId} + '-organic'">3.0.2
Kannst

1
Für die Verwendung der vertikalen Leiste (|) im Text:<p>[[${fullName}]] Stories | Twiza </p>
Ranjan

3

Beachten Sie, dass mit | char, Sie können eine Warnung mit Ihrer IDE erhalten, zum Beispiel bekomme ich eine Warnung mit der letzten Version von IntelliJ. Die beste Lösung ist also, diese Syntax zu verwenden:

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

1

Wir können uns so verhalten:


<h5 th:text ="${currentItem.first_name}+ ' ' + ${currentItem.last_name}"></h5>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.