用thymeleaf添加条件属性

时间:2015-01-16 14:49:34

标签: html 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属性?

2 个答案:

答案 0 :(得分:3)

我想问题是如果你在片段中声明了附加参数 - 你需要传递它。因此,您可以传递自动对焦或空值(&#39;&#39;)并使用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>

但我猜詹姆斯评论使用 th:autofocus 将是最好的解决方案:

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

在所有情况下,您仍需要传递自动对焦=&#34;自动对焦&#34; 自动对焦=&#34;&#34; 作为参数

答案 1 :(得分:0)

我认为片段的任务太复杂了。我用方言解决了这个问题。请参阅我的questionsolution