Spring MVC, в методе onBindAndValidate вызываю валидацию каптчи. Как отобразить ошибку, не ассоциированную с command object?
| Код | protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception { validateCaptcha(request, errors); }
protected void validateCaptcha(HttpServletRequest request, BindException errors){ boolean isResponseCorrect = false;
//remenber that we need an id to validate! String captchaId = request.getSession().getId(); //retrieve the response String response = request.getParameter(captchaResponseParameterName); //validate response try { if(response != null){ isResponseCorrect = captchaService.validateResponseForID(captchaId, response); } } catch (CaptchaServiceException e) { //should not happen, may be thrown if the id is not valid e.printStackTrace(); }
if(!isResponseCorrect){ //prepare object error, captcha response isn`t valid String objectName = "captcha"; String[] codes = {"captchaerror"}; Object[] arguments = {}; String defaultMessage = "Wrong captcha text!"; ObjectError oe = new ObjectError(objectName, codes, arguments, defaultMessage); errors.addError(oe); } }
|
В случае ошибки валидации создается объект ObjectError, кладется в BindException, как отобразить ошибку на странице? Данная ошибка не ассоциирована с комманд объект и поэтому form:errors path="..." тут не катит?
Добавлено через 14 минут и 43 секунды Решение найдено.
| Код | <tr> <td>Суперсекретный код<br> <c:url var="captchPath" value="/captcha.htm"/> <img src="${captchPath}"/> </td> <td><input type="text" name="j_captcha_response"/></td> <td style="color:red;"> <spring:hasBindErrors name="newUser"> <c:if test="${not empty errors.globalErrors}"> <c:forEach items="${errors.globalErrors}" var="error"> <c:out value="${error.defaultMessage}"/> </c:forEach> </c:if> </spring:hasBindErrors>
</td> </tr>
|
|