具有 HTML5 布尔属性的 Java Spring Form 字段
Posted
技术标签:
【中文标题】具有 HTML5 布尔属性的 Java Spring Form 字段【英文标题】:Java Spring Form fields with HTML5 boolean attributes 【发布时间】:2012-11-24 16:46:57 【问题描述】:我想将属性disabled
、required
和autofocus
添加到Java Spring Forms 3.1。感谢some questions 我知道了如何,但我无法让它为boolean attributes 工作。
我们有一个表单实用程序库,它包装了 Spring Form,以便我们可以添加标签和其他东西。
所需的 JSP:
<formUtil:formInputBox ... autofocus="true" />
所需的输出 html:
<label>...<input type="text" ... autofocus /></label>
这在我们的 formUtil 中作为 JSP:include 有效,但不使用 Spring:
<input type="text" ... <c:if test="$param.autofocus=='true'">autofocus</c:if> />
这在我们的 formUtil 标记中不起作用,但使用 Spring:
<form:input ... <c:if test="$autofocus==true">autofocus</c:if> />
// Gives exception: `Unterminated <form:input tag`.
问题: 如何通过所需的输入获得所需的输出?我想在 Spring 中保留数据绑定等,所以我不想扮演自己的表单字段。
注意:
HTML5 中的布尔属性不支持布尔值,所以我不能拥有autofocus=true
。必须是 autofocus
或 autofocus="autofocus"
。
【问题讨论】:
【参考方案1】:据我所知,您不能在尝试时将核心标签放在弹簧标签内
<form:input ... <c:if test="$autofocus==true">autofocus</c:if> />
可以在 spring 标记属性的值中插入 jstl 表达式,但它们对您没有帮助,因为 html5 只检查是否存在自动对焦。
<s:set var="autofocusVal" value=""/>
<c:if test="$autofocus">
<s:set var="autofocusVal" value="autofocus"/>
</c:if>
<form:input autofocus="$autofocusVal" />
但你可以这样做:
<c:choose>
<c:when test="$autofocus">
<form:input autofocus="autofocus" />
</c:when>
<c:otherwise>
<form:input />
</c:otherwise>
</c:choose>
这真的很冗长且难以维护,尤其是当您有多个要添加的属性时。
另一个糟糕的解决方法是设置一个 data-xxx 属性来标记带有自动对焦的标签,并使用 javascript 通过添加属性 autofocus 来修改 html where data-autofocus="true":
<form:input data-autofocus="$autofocus" />
更优雅的方法(我现在能想到)是使用您想要添加的属性扩展该标签,如下所述:https://***.com/a/9891714/249699
【讨论】:
以上是关于具有 HTML5 布尔属性的 Java Spring Form 字段的主要内容,如果未能解决你的问题,请参考以下文章