我需要一些建议,如何推荐使用 Thymeleaf 处理 Twitter Bootstrap 字段的方法。我知道推荐不是那么容易,所以我写了我的想法,希望你能评论它。最后有一些具体的问题。首先,我尝试了一个片段,它显示了生成所需的内容
<div th:fragment="textfield">
<div class="control-group"
th:classappend="${#fields.hasErrors('__${fId}__')}? 'error'">
<label class="control-label" th:for="${fId}"
th:text="#{model.__*{class.simpleName}__.__${fId}__}+':'">
FirstName
</label>
<div class="controls">
<input type="text" th:class="${inputclass}" th:field="*{__${fId}__}" th:disabled="${disabled}"/>
<span class="help-inline" th:if="${#fields.hasErrors('__${fId}__')}"
th:errors="*{__${fId}__}"></span>
</div>
</div>
</div>
可以与
<div class="control-group replace" th:include="templates::textfield" th:with="fId='userId'" th:remove="tag">
<label class="control-label replace">Benutzer-Id</label>
<div class="controls replace">
<input type="text" value=""/>
</div>
</div>
或简而言之
<div class="control-group replace" th:include="templates::textfield" th:with="fId='userId'" th:remove="tag"/>
输入不是很灵活,因此您需要一个复选框一个自己的片段。
接下来我选择布局方法:
<div layout:fragment="bsfield">
<div class="control-group" th:classappend="${#fields.hasErrors('__${fId}__')}? 'error'">
<label class="control-label" th:for="${fId}"
th:text="#{model.__*{class.simpleName}__.__${fId}__}+':'">
FirstName </label>
<div class="controls">
<span layout:fragment="bsinput" th:remove="tag">
<input type="text" class="replace" th:field="*{__${fId}__}" th:disabled="${disabled}"/>
</span>
<span class="help-inline" th:if="${#fields.hasErrors('__${fId}__')}"
th:errors="*{__${fId}__}"></span>
</div>
</div>
</div>
这非常灵活,因为我可以直接定义我的输入。
我可以很快使用它
<div layout:include="templates::bsfield" th:with="fId='firstName'" th:remove="tag">
<div layout:fragment="bsinput">
<input type="text" th:field="*{__${fId}__}" th:disabled="${disabled}"/>
</div>
</div>
或更多原型风格
<div class="control-group" layout:include="templates::bsfield" th:with="fId='lastName'" th:remove="tag">
<label class="control-label" th:remove="all">Last Name</label>
<div class="controls" th:remove="tag">
<div layout:fragment="bsinput">
<input type="text" th:field="*{__${fId}__}" th:disabled="${disabled}"/>
</div>
</div>
</div>
两种变体仍然有很多样板。所以我想到了以下受 Playframework helper 启发的解决方案。
<input type="text" th:bsfield="firstName" th:disabled="${disabled}"/>
并编写一个处理器来创建
<div class="control-group"
th:classappend="${#fields.hasErrors('${fId}')}? 'error'">
<label class="control-label" th:for="${fId}"
th:text="#{model.__*{class.simpleName}__.${fId}}+':'">
FirstName </label>
<div class="controls">
<input type="text" th:class="${inputclass}" th:field="*{${fId}}" th:disabled="${disabled}"/>
<span class="help-inline" th:if="${#fields.hasErrors('${fId}')}"
th:errors="*{${fId}}"></span>
</div>
</div>
并替换${fId}
为本示例中的 bsfield 值“firstname”。之后,Thymeleaf 应该重新计算它(setRecomputeProcessorsImmediately (true);
)对于原型,我认为有必要编写一个 JS-Solution。
我不确定这是真的聪明还是滥用处理器。此外,我不确定初学者需要多少时间来编写这样的处理器。几天4小时或更多是现实的吗?
如果有人可以给我一个提示,将不胜感激。