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; } }
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With