如何在基于spring的应用程序中为元素设置焦点

时间:2012-02-28 14:53:13

标签: forms validation user-interface spring-mvc custom-errors

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

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

spring标签是否支持。任何技术想法?目前,我在字段本身附近显示错误消息。

3 个答案:

答案 0 :(得分: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部分将在特定字段时聚焦元素 有验证错误。

答案 1 :(得分:1)

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

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

你不能在这里使用spring <form:input />,因为它不适用于条件属性。

答案 2 :(得分: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一次足够