James
James

Reputation: 3184

Thymeleaf - Always keep the HTML element but conditionally show a value

I need Thymeleaf to always include a label element but only conditionally show a value for it.

If message.type is equal to warning it should show the message.text. Otherwise, the HTML DOM should still contain the label element.

I've tried this but then the label element is missing from the HTML when the message.type is not equal to warning.

<label id="message" th:if="${message.type == 'warning'}" 
   th:value="${message.text}" th:text="${message.text}"></label>

I'm trying to accomplish something like this:

<label id="message" th:value="${message.type=='warning' ? 
    message.text: ''}" th:text="${message.type=='warning'? 
   message.text: ''"></label>

If the message.type is warning, I would expect HTML like this:

<label id="message">My warning message</label> 

Otherwise, I would like to have HTML like this:

<label id="message"></label> 

Upvotes: 0

Views: 149

Answers (1)

Metroids
Metroids

Reputation: 20477

Many different ways to accomplish this. You already have one that I would expect to work. (why do you say it doesn't work?) Also, I'm not sure why you are including th:value in your tags (I'm including them to match your question).

<label
    id="message"
    th:value="${message.type == 'warning'? message.text : ''}"
    th:text="${message.type == 'warning'? message.text : ''}"></label>

You could also do something like this:

<label th:if="${message.type == 'warning'}" id="message"  th:value="${message.text}" th:text="${message.text}"></label>
<label th:unless="${message.type == 'warning'}" id="message"></label>

or like this (assuming an extra span wouldn't mess up the markup you are wanting):

<label id="message"><span th:if="${message.type == 'warning'}" th:text="${message.text}" /></label>

Upvotes: 1

Related Questions