ОБНОВЛЕНИЕ :
Подход Thymeleaf if
не будет работать для ситуации ОП. Поэтому единственный другой подход, который я могу предложить, - это использовать JavaScript (в данном случае jQuery):
Предположим, MyTag
может быть присвоен класс в дополнение к другому необходимому контенту:
<MyTag class="myClass"...></MyTag>
Затем используйте basi c Thymeleaf - не пытайтесь учесть нули.
Затем используйте jQuery, чтобы "заполнить пробелы атрибутов, для тех случаев, когда их еще нет значение для соответствующего атрибута - например:
<script>
$(document).ready(function () {
$( ".myClass" ).each(function() {
if ( ! $( this ).attr("Description") ) {
$( this ).attr("Desciption", "");
}
});
});
</script>
Таким образом, DOM будет включать атрибут следующим образом:
<MyTag class="myClass" Description="" ...></MyTag>
Это может быть расширено, чтобы охватить другие атрибуты по мере необходимости .
Оригинальный подход - не может использоваться OP :
Единственный способ, которым я знаю, как это сделать с помощью Thymeleaf:
Использовать if
вернуться к обычному HTML, если это ситуация «все или ничего» (т. е. если все атрибуты, которые вы хотите использовать, равны нулю или все они не равны нулю).
Это Ситуация в вопросе - так что, возможно, это все, что вам нужно.
Пример:
Запуск с простым компонентом Name
, содержащим 3 поля: первое, среднее и последнее, у нас есть эти данные:
Map<String, Object> model = new HashMap();
List<Name> names = new ArrayList();
names.add(new Name("John", "Jack", "Smith"));
names.add(new Name("Fred", null, "Jones"));
model.put("names", names);
ctx.render("names.html", model);
Используя следующий Thymeleaf ...
<th:block th:each="name : ${names}">
<th:block th:if="${name.middle} == null">
<div middle=""
th:text="${name.first} + ' ' + ${name.last}">
</div>
</th:block>
<th:block th:if="${name.middle} != null">
<div th:attr="middle=${name.middle}"
th:text="${name.first} + ' ' + ${name.last}">
</div>
</th:block>
</th:block>
.. Мы получаем это HTML:
<div middle="Jack">John Smith</div>
<div middle="">Fred Jones</div>
Конечно, это не особенно гибко, как упомянуто выше. Например, метод jQuery .attr()
возвращает undefined
для отсутствующих атрибутов.
Side Примечание:
Вы можете заменить это:
th:attr="middle=${name.middle}"
с этим:
th:middle="${name.middle}"
Это даст вам тот же конечный результат.
Конечная точка:
Опять же, не имеет прямого отношения к вашему вопросу, но ... Я было бы осторожно иметь атрибут "id" без значения. Используйте уникальное значение или не используйте атрибут "id".