Java Spring表单字段与HTML5布尔属性

4
我想在Java Spring Forms 3.1中添加disabledrequiredautofocus属性。感谢一些问题,我找到了如何做,但是我无法使布尔属性生效。
我们有一个表单实用程序库,它包装了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个回答

2
据我所知,您不能像您尝试的那样在Spring标签内放置核心标签。
<form:input ... <c:if test="${autofocus==true}">autofocus</c:if> />

在Spring标签属性的值中插入JSTL表达式是可能的,但它们对于HTML5并没有帮助,因为HTML5只检查是否存在autofocus。

<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 属性来标记带有 autofocus 的标签,并使用 JavaScript 在 data-autofocus="true" 的地方添加 autofocus 属性:

<form:input data-autofocus="${autofocus}" />

更加优雅的做法(目前我能想到的)是通过扩展标签并添加所需的属性,具体方法可参考此处:https://dev59.com/NEzSa4cB1Zd3GeqPp9NN#9891714


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接