我只是想在我的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>