全局形式:错误字段序列

时间:2013-08-06 19:50:43

标签: java forms spring jsp validation

在表单开头,我有一个全局表单:错误:

<form:form method="post" action="updateMainContact" modelAttribute="mainContact">
<form:errors path="*" cssClass="errorblock" element="div" />            

在我的表单中,我按此特定顺序排列了三个字段:电话,单元格,传真

<th><label for="mainContactPhoneLabel">Phone Number:<br>9999999999</label></th> 
    <td><form:input path="phone" type="integer" size="10" maxlength="10"  />
<th><label for="mainContactFaxLabel">Fax:<br>9999999999</label></th> 
    <td><form:input path="fax" type="integer" size="15" maxlength="15" />
<th><label for="mainContactEmailLabel">Email:</label></th> 
    <td><form:input path="email" type="text" size="30" maxlength="30" /></td>

当我强制所有三个字段的typemismatch错误时,结果序列始终是Cell,Fax然后是Phone 。 这是为什么 ?如何在屏幕上按照我的字段顺序进行订单(电话,手机,传真)?

请注意,我不能使用单独的表单:错误标记,因为我没有足够的空间来放置表单:errors标记,这就是为什么我将它们全部放在顶部。

编辑我希望所有错误消息都在同一个“错误块”中。在顶部单独列出它们:

<form:errors path="phone" cssClass="errorblock" />
<form:errors path="cell" cssClass="errorblock" />
<form:errors path="fax" cssClass="errorblock" />

对我没用,因为它会为每条错误消息创建一个错误块。

2 个答案:

答案 0 :(得分:1)

最后,在互联网上进行了大量搜索之后,我终于找到了一种方法来获得我想要的结果:

<spring:hasBindErrors name="mainContact">                   
    <c:if test="${errors.errorCount > 0}">
        <div class="errorblock">
            <c:forEach items="${errors.fieldErrors}" var="errorList">
                <c:if test="${errorList.field=='phone'}">
                   <form:errors path="phone" /><br>
                </c:if>
            </c:forEach>
            <c:forEach items="${errors.fieldErrors}" var="errorList">
                <c:if test="${errorList.field=='cell'}">
                   <form:errors path="cell" /><br>
                </c:if>
            </c:forEach>                            
            <c:forEach items="${errors.fieldErrors}" var="errorList">
                <c:if test="${errorList.field=='fax'}">
                   <form:errors path="fax" /><br>
                </c:if>
            </c:forEach>                            
        </div>                              
    </c:if>
</spring:hasBindErrors>

此代码将每条错误消息放在同一“错误”块中的单独一行上。

答案 1 :(得分:0)

简单的方法是为每个单独的字段使用路径。

<form:errors path="phone" cssClass="errorblock" element="div" />
<form:errors path="cell" cssClass="errorblock" element="div" />
<form:errors path="fax" cssClass="errorblock" element="div" />

您也可以尝试使用群组解决方案(请参阅Error messages are not in the correct order)。但对我来说这似乎不是一个好选择。

修改

为什么不对这类div的错误使用整个errorblock

<div class="errorblock">
    <form:errors path="phone" cssClass="" element="div" />
    <form:errors path="cell" cssClass="" element="div" />
    <form:errors path="fax" cssClass="" element="div" />
</div>