95 votes

Feuille de thym : Concaténation - Impossible de l'analyser en tant qu'expression

Je rencontre un problème lorsque j'essaie de concaténer plusieurs valeurs dans mon modèle. Selon Thymeleaf aquí Je devrais simplement être capable de les + ensemble...

4.6 CONCATÉNATION DE TEXTES

Les textes, qu'ils soient littéraux ou qu'ils résultent de l'évaluation d'une variable ou d'un message peuvent être facilement concaténés à l'aide de l'opérateur + :

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

Voici un exemple de ce que je trouve efficace :

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

Mais ce n'est pas le cas ici :

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

Logiquement, cela devrait fonctionner mais ce n'est pas le cas, qu'est-ce que je fais mal ?


Maven :

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

Voici comment j'ai configuré mon TemplateEngine et mon 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;
  }
}

237voto

Elijah Saounkine Points 4108

Mais d'après ce que je vois, vous avez une simple erreur de syntaxe.

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

la syntaxe correcte serait la suivante

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

En fait, la syntaxe th:text="'static part' + ${bean.field}" est égal à th:text="${'static part' + bean.field}" .

Essayez-le. Même si c'est probablement un peu inutile maintenant après 6 mois.

37voto

Vous pouvez concaténer plusieurs types d'expression en entourant votre expression simple/complexe entre || des personnages :

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

6voto

Walterwhites Points 97

Notez qu'avec | char, vous pouvez obtenir un avertissement avec votre IDE, par exemple j'obtiens un avertissement avec la dernière version d'IntelliJ, Donc la meilleure solution est d'utiliser cette syntaxe :

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

4voto

Abhishek Sengupta Points 463

Nous pouvons concaténer comme ceci :


<h5 th:text ="${currentItem.first_name}+ ' ' + ${currentItem.last_name}"></h5>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X