【问题标题】:Java Spring Form fields with HTML5 boolean attributes具有 HTML5 布尔属性的 Java Spring Form 字段
【发布时间】: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"

【问题讨论】:

    标签: java forms html spring


    【解决方案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://stackoverflow.com/a/9891714/249699

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2016-10-10
      • 2021-11-21
      相关资源
      最近更新 更多