具有 HTML5 布尔属性的 Java Spring Form 字段

Posted

技术标签:

【中文标题】具有 HTML5 布尔属性的 Java Spring Form 字段【英文标题】:Java Spring Form fields with HTML5 boolean attributes 【发布时间】:2012-11-24 16:46:57 【问题描述】:

我想将属性disabledrequiredautofocus 添加到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 &lt;form:input tag`.

问题: 如何通过所需的输入获得所需的输出?我想在 Spring 中保留数据绑定等,所以我不想扮演自己的表单字段。

注意: HTML5 中的布尔属性不支持布尔值,所以我不能拥有autofocus=true。必须是 autofocusautofocus="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 字段的主要内容,如果未能解决你的问题,请参考以下文章

form属性的错误使用

Java过滤器不能返回布尔值[重复]。

html - 具有布尔值的属性 [重复]

html5 表单的required属性

使用具有线段属性的Boost :: Geometry Polygon布尔值/交叉点

比较具有布尔属性的两个通用项,如果其中任何一个返回true,则返回结果通用列表中的true