Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Thymeleaf: Concatenation - Could not parse as expression

I'm having an issue when trying to concat multiple values in my template. According to Thymeleaf here I should simply be able to + them together...

4.6 CONCATENATING TEXTS

Texts, no matter whether they are literals or the result of evaluating variable or message expressions, can be easily concatenated using the + operator:

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

Here is an example of what I found works:

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

This however doesn't:

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

Logically, this should work but its not, what am I doing wrong?


Maven:

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

Here is how I've set my TemplateEngine and TemplateResolver up:

<!-- 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;   } } 
like image 233
NeilA Avatar asked Apr 20 '13 10:04

NeilA


People also ask

How do you set a variable in Thymeleaf?

We can use the th:with attribute to declare local variables in Thymeleaf templates. A local variable in Thymeleaf is only available for evaluation on all children inside the bounds of the HTML tag that declares it.


1 Answers

But from what I see you have quite a simple error in syntax

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

the correct syntax would look like

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

As a matter of fact, the syntax th:text="'static part' + ${bean.field}" is equal to th:text="${'static part' + bean.field}".

Try it out. Even though this is probably kind of useless now after 6 months.

like image 149
Ilya Saunkin Avatar answered Oct 13 '22 06:10

Ilya Saunkin