Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Отобразить ошибку не забиндинную на поле


Автор: garbuz 28.6.2009, 17:57
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>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)