Проверьте использование JSTL относительно ошибки привязки пружины - PullRequest
6 голосов
/ 17 июля 2010

Я пытался это некоторое время, но не могу найти правильное решение.

Я хочу использовать JSTL, чтобы проверить, есть ли какие-либо ошибки привязки (ошибка поля или глобальная ошибка), которые произошли в моем Spring MVC 2.5.

Я знаю, что могу использовать этот код:

<p>
    <spring:hasBindErrors name="searchItems">
        An Error has occured
    </spring:hasBindErrors>
</p>

Но я хочу использовать JSTL для проверки на наличие ошибок.

Я пробовал это с использованием JSTL:

<c:if test="${not empty errors}">
    An Error has occured
</c:if>

Но, похоже, я не могу его правильно уловить.

Мне нужно использовать JSTL, поскольку существуют другие части JSP, которые зависят от наличия или отсутствия ошибок привязки.

Ответы [ 3 ]

6 голосов
/ 18 июля 2010

Как уже было сказано

Я хочу использовать JSTL для проверки на наличие ошибок

Просто использовать (Работает только в Spring MVC 2.5 -Не переносимый для Spring MVC 3.0 , хотя я полагаю, это requestScope ['bindingResult..allErrors '] )

<c:if test="${not empty requestScope['org.springframework.validation.BindingResult.<COMMAND_NAME_GOES_HERE>'].allErrors}">
    An Error has occured!!!
</c:if>

Имейте в виду default имя команды - неквалифицированное имя класса команды с первой буквой в нижнем регистре .Обратите внимание на следующее имя команды: pet

private PetValidator petValidator = new PetValidator();

@RequestMapping(method.RequestMethod.POST)
public void form(Pet command, BindingResult bindingResult) {
    if(petValidator.validate(command, bindingResult)) {
        // something goes wrong
    } else {
        // ok, go ahead
    }
}

Поэтому ваша форма должна выглядеть так:

<!--Spring MVC 3.0 form Taglib-->
<form:form modelAttribute="pet">

</form:form>
<!--Spring MVC 2.5 form Taglib-->
<form:form commandName="pet">

</form:form>

Если вы не используете @ ModelAttribute

@RequestMapping(method.RequestMethod.POST)
public void form(@ModelAttribute("command") Pet command, BindingResult bindingResult) {
    // same approach shown above
}

Таким образом, ваша форма должна выглядеть так:

<!--Spring MVC 3.0 form Taglib-->
<form:form modelAttribute="command">

</form:form>
<!--Spring MVC 2.5 form Taglib-->
<form:form commandName="command">

</form:form>
4 голосов
/ 22 апреля 2011

Примерно так:

<spring:hasBindErrors name="userName">
    <c:set var="userNameHasError" value="true" />
</spring:hasBindErrors>

<c:choose>
    <c:when test="${userNameHasError}">
         <%-- Display username as textbox --%>
    </c:when>
    <c:otherwise>
         <%-- Display username as label --%>
    </c:otherwise>
</c:choose>

Возможно, вы также можете выставить настройки ошибок, чтобы перехватывать все ошибки на странице (непроверенные):

<spring:hasBindErrors name="*">
    <c:set var="userNameHasError" value="true" />
</spring:hasBindErrors>

Наслаждайтесь!

3 голосов
/ 06 декабря 2012

После игры с тегом <spring:hasBindErrors> я обнаружил, что у него есть определенные ограничения:

  • Это полезно только при наличии ошибок.

  • org.springframework.validation.Errors объект доступен только внутри тега

Что если бы просто хотелось узнать, есть ошибки или нет. Если ошибок нет, <spring:hasBindErrors> становится бесполезным. Проведя некоторое исследование с моим коллегой, мы распечатали все атрибуты запроса. Оказывается, есть атрибут с именем:

org.springframework.validation.BindingResult.command

Объект команды здесь - это объект команды поддержки формы. Как бы не интуитивно это ни называлось, этот атрибут содержит ссылку на наш объект Errors. Таким образом, это работает:

${requestScope['org.springframework.validation.BindingResult.command'].errorCount}

и дает нам представление о столь востребованном объекте Errors в JSTL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...