Thymeleaf does not recognize the span-tag



我只是想在我的DataTable不同的枚举值有不同的颜色。我还需要th:text作为我创建的过滤器。

我该怎么做才能使用th:text并保持span格式?

<td class="incident" th:text="${ticket.getStatus().toString()}">
<a th:if="${ticket.getStatus().toString()} == 'OPEN'">
<span th:text="${ticket.getStatus().toString()}" class="badge text-white" style="background-color: #F93154"></span>
</a>
<a th:if="${ticket.getStatus().toString()} == 'IN_PROCESS'">
<span th:text="${ticket.getStatus().toString()}" class="badge text-white" style="background-color: #FFEA00"></span>
</a>
<a th:if="${ticket.getStatus().toString()} == 'CLOSED'">
<span th:text="${ticket.getStatus().toString()}" class="badge text-white" style="background-color: #00E676"></span>
</a>
</td>

修改如下:

<td class="incident" th:text="${ticket.getStatus().toString()}">

:

<td class="incident">

原因是<td>标签中的th:text表达式会导致所有子内容被忽略。


您还可以通过将getStatus()更改为status来稍微清理Thymeleaf,因为Thymeleaf将自动将JavaBean命名规则应用于字段名status,并在幕后实际调用getStatus()


我还建议考虑更新枚举,以便它可以直接返回字符串值-参见使用枚举值作为字符串字面量。这将进一步允许你简化你的thymleaf,并摆脱所有嵌入在模板中的.toString()方法。

为例,假设您有枚举:

public enum Status {
OPEN, IN_PROCESS, CLOSED;
}

您可以将其更改为:

public enum Status {
OPEN("Open"),
IN_PROCESS("In Process"),
CLOSED("Closed");
private final String label;
private Status(String s) {
label = s;
}

public String getLabel() {
return label;
}

// toString and comparison methods not shown
}

现在每个枚举都有一个相关的字符串值("标签"),您可以这样使用:

<table>
<td class="incident">
<a th:if="${ticket.status.label} == 'Open'">
<span th:text="${ticket.status.label}" 
class="badge text-white" 
style="background-color: #F93154"></span>
</a>
<a th:if="${ticket.status.label} == 'In Progress'">
<span th:text="${ticket.status.label}" 
class="badge text-white" 
style="background-color: #FFEA00"></span>
</a>
<a th:if="${ticket.status.label} == 'Closed'">
<span th:text="${ticket.status.label}" 
class="badge text-white" 
style="background-color: #00E676"></span>
</a>
</td>
</table>

最新更新