0

我有一个 spring 应用程序,我在其中验证自定义 spring 验证器类中的所有验证。

我的表单有近 15 个字段。如果最后一个字段有错误,如何将焦点设置到该元素。

弹簧标签是否支持这一点。有什么技术想法吗?目前我在字段本身附近显示我的错误消息。

4

3 回答 3

2

可以使用spring:bind标签来判断一个字段或整个模型对象是否有错误,以及处理(提交)后对象的整体状态。

<spring:bind path="user.username">
    <input id="inputId" type="text" name="${status.expression}" value="${status.value}"/>
    <c:if test="${status.error}">
        <c:forEach items="${status.errorMessages}" var"error">
            <span class="field-error">${error}</span>
        </c:forEach>
        <script type="text/javascript">
            document.getElementById('inputId').focus();
        </script>
    </c:if>
</spring:bind>

笔记:

  • 变量由标签status公开。spring:bind
  • 当特定字段出现验证错误时,javascript 部分将聚焦该元素。
于 2012-02-28T18:27:49.840 回答
1

您可以将自动对焦设置为所有有错误的字段,但您的浏览器只会自动对焦(并滚动)到第一个字段。

<spring:bind path="someFieldName">
  <input type="text" name="someFieldName" value="${status.value}" ${status.error?'autofocus="autofocus"':''} />
</spring:bind>

您不能<form:input />在此处使用 spring,因为它不适用于条件属性。

于 2015-02-18T02:17:40.670 回答
0

我用过这个:

    <spring:bind path="*">
        <c:if test="${status.error}"> 
            <script type="text/javascript">
                window.onload = function(){
                    document.getElementById('${status.errors.fieldErrors[0].field}').focus();
                };
            </script>  
        </c:if>
    </spring:bind>

如果有错误,它将找到第一个 fieldError 及其 id 并将焦点设置在该元素上

忘了说美妙之处在于您不需要将此代码放在每个输入旁边。每个jsp一次就够了

于 2017-03-03T15:05:21.223 回答