2015-01-16 4 views
2

У меня есть фрагмент thymeleaf для создания поля ввода, как:Добавить условный атрибут с thymeleaf

<div th:fragment="formField"> 
     <input th:type="${type}" th:errorclass="field_error" th:field="*{__${field}__}" th:placeholder="#{__${placeholder}__}" /> 
</div> 

Этот фрагмент, например, используется как:

<div th:replace="fragments :: formField (type='password', field='password', placeholder='resetPassword.form.password')"> 

Теперь атрибут автофокус должен быть добавлен или нет в поле ввода на основе параметров фрагмента. Использование фрагмента, например. как это следует добавить атрибут автофокусировки:

<div th:replace="fragments :: formField (type='password', field='password', placeholder='resetPassword.form.password', autofocus='autofocus')"> 

Я не мог найти способ, чтобы добавить атрибут автофокусировки условно входной тегу на основе параметров фрагмента. Я попытался использовать th: attr, но всегда попадал в синтаксические ошибки.

Есть ли способ создать атрибуты html условно с тимелеафом?

+0

Вы пытаетесь объявить поле автофокуса в html (первый фрагмент кода). Другие поля делятся. Другое предложение, вы можете попробовать атрибут 'th: with' от thymeleaf –

+0

th: с помощью только позволяет вам определять переменные. – James

+1

Существуют специальные атрибуты для [fixed-value-boolean-attributes] (http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#fixed-value-boolean-attributes), который позволяет вам установить такие специальные атрибуты, как «автофокус», основанный на булевом выражении типа James

ответ

2

Я предполагаю, что проблема заключается в том, что если вы объявите дополнительный параметр в фрагменте, вам необходимо передать его. Таким образом, вы можете передать либо автофокус, либо пустое значение ('') и обработать чек с помощью Thymeleaf.

Например, вы звоните:

<div th:replace="fragments :: formField (type='password', field='password', 
    placeholder='resetPassword.form.password', autofocus='')"> 

Затем обработать его:

<div th:fragment="formField"> 
     <input th:if="${!autofocus.isEmpty()}" th:type="${type}" 
       th:errorclass="field_error" th:field="*{__${field}__}" 
       th:placeholder="#{__${placeholder}__}" autofocus="true"/> 
     <input th:if="${autofocus.isEmpty()}" th:type="${type}" 
       th:errorclass="field_error" th:field="*{__${field}__}" 
       th:placeholder="#{__${placeholder}__}"/> 
    </div> 

Или:

 <div th:fragment="formField" th:switch="${autofocus}"> 
      <input th:case="'autofocus'" th:type="${type}" 
        th:errorclass="field_error" th:field="*{__${field}__}" 
        th:placeholder="#{__${placeholder}__}" autofocus="true"/> 
      <input th:case="*" th:type="${type}" th:errorclass="field_error" 
        th:field="*{__${field}__}" 
        th:placeholder="#{__${placeholder}__}"/> 
     </div> 

Но я предполагаю, что Джеймс комментарий использовать -й: автофокусировка было бы лучшим решением:

<div th:fragment="formField"> 
     <input th:type="${type}" th:errorclass="field_error" 
       th:field="*{__${field}__}" th:placeholder="#{__${placeholder}__}" 
       th:autofocus="${!autofocus.isEmpty()}" /> 
</div> 

Во всех случаях вам еще нужно пройти автофокусировку = «автофокус» или автофокусировкой = «» в качестве параметра.

+0

Я хотел избегать двух одинаковых полей , которые просто отличаются по автофокусу атрибут. – James

0

Я думаю, что это слишком сложная задача для фрагмента. Я решил проблему с диалектом. См. Мои question и solution.

Смежные вопросы