在Thymeleaf(2.1.4.RELEASE)中使用th:field
时,有没有办法抑制元素的自动生成ID属性?例如,给定代码:
<input type="text" th:field="*{year}" />
将生成以下HTML:
<input type="text" id="year" name="year" value="" />
我想要实现的是(没有id属性):
<input type="text" name="year" value="" />
在JSP中,它就像设置空ID一样简单:
<form:input path="year" id="" />
但是Thymeleaf只是用默认生成的属性替换了这个空属性。
答案 0 :(得分:1)
好的,我查看了Thymeleaf(2.1.4.RELEASE)的源代码,负责在Spring方言中设置元素id的方法是调用org.thymeleaf.spring4.processor.attr.SpringInputGeneralFieldAttrProcessor.doProcess(...)
的{{1}} (source on Github) (source on Github)。如果您查看org.thymeleaf.spring4.processor.attr.AbstractSpringFieldAttrProcessor.computeId(...)
,您会发现没有简单的方法来设置空ID。
所以我们需要用一种简单的方式来做:)这是:
我创建了一个自定义方言并定义了一个自定义属性computeId(...)
。标记看起来像这样:
noid
有一个很棒的tutorial解释如何在Thymeleaf中创建和使用自定义方言,下面是最重要的部分:属性处理器负责从给定元素中删除id属性。
需要注意的重要事项:
代码:
<input type="text" th:field="*{year}" thex:noid="true" />
答案 1 :(得分:0)
如果你不想在输入字段的id中使用它,只需将值分配给th:name字段,
<input type="text" th:name="*{year}" />
会给你输出,
<input type="text" name="2015" />
或您可以在末尾使用字符串使id生成与name属性不同,如下所示
<input type="text" th:name="*{year}" th:id="*{year} + '-year' " />
会给你输出,
<input type="text" name="2015" id="2015-year"/>