Динамическое th: определение attr для нескольких атрибутов в одном html-элементе с помощью thymeleaf

Я пытаюсь обобщить поля формы для формы. Я хочу иметь разные требования к валидации parsley.js. Есть 2 нестандартных атрибута, которые я хочу динамически добавить в поле ввода: required и data-parsley-range. Пример простого html без тимелина:

<input type=text required data-parsley-range=[1,100] />

Я попробовал следующее с тимелистом:

<input class="form-control" fieldType="text" th:attr="required=${field.isRequired ? 'required' : null}" 
th:attr="data-parsley-range=${field.validStringLengthMin ? [${field.validStringLengthMin},${field.validStringLengthMax}] : null}"/>

Но у меня есть ошибка, что th:attr определяется несколько раз.

Поэтому мой вопрос: как я могу определить несколько атрибутов с помощью th:attr в одном элементе HTML?

Мой дополнительный вопрос: как я могу условно разместить атрибуты? Например, я вообще не хочу писать required='required', если я могу избежать этого, то же самое относится и к диапазону.

Ответ 1

Прямое решение - использовать запятую , для разделения нескольких атрибутов.

<input th:attr="required=${field.isRequired ? 'required' : null}, data-parsley-range=${field.validStringLengthMin ? [${field.validStringLengthMin},${field.validStringLengthMax}] : null}" />

В качестве альтернативы, если вы хотите сохранить атрибуты отдельно для лучшего чтения, вы можете использовать th:attrappend:

<input th:attr="required=${field.isRequired ? 'required' : null}" 
th:attrappend="data-parsley-range=${field.validStringLengthMin ? [${field.validStringLengthMin},${field.validStringLengthMax}] : null}" />