Как получить доступ к Spring 3 результата проверки MVC в JSP без использования формы taglib
У меня есть простая форма Spring 3 MVC с использованием jsp taglib. Мне нужно добавить класс, основанный на том, имеет ли поле в форме какие-либо ошибки, связанные с ним или нет. Вот сниппет моего HTML:
<div class="control-group error"> <!-- HERE: binding.hasErrors() ? "error" : "" -->
<form:label path="username" cssClass="control-label">User Name</form:label>
<div class="controls">
<form:input path="username" cssClass="span3"/>
<form:errors path="username" cssClass="help-inline" />
</div>
</div>
Итак, в первой строке атрибут класса имеет два класса: "control-group" и "error". Мне нужно добавить класс ошибки, только если это поле связано с ошибкой. Я знаю, что WebDataBinder как-то включен в страницу, но я не знаю, как получить к нему доступ. По сути, я просто хочу выполнить какую-то хорошую старую моду <% = binding.hasError()? "error": ""% > , но как мне получить доступ к связующему на странице?
Ответы
Ответ 1
Хотя это немного более непонятно, я думаю, что это проще, потому что это единственная строка, которая была бы такой, какой была бы, если бы я просто использовал скрипты, как любой здравомыслящий Java-разработчик. Тэглибы должны умереть умереть, а затем умереть еще. Они ужасны, и я не могу поверить, что разработчики Java по-прежнему считают, что они действительно помогают, а не тратят свое время. PHP-разработчики смеются над нами, когда мы используем эти вещи.
<div class="control-group ${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('firstName') ? 'error' : ''}">
Ответ 2
Вы пробовали тег <spring:hasBindErrors>
(я не понимаю, что вы имеете в виду, пишите "без использования формы taglib" )?
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<spring:hasBindErrors name="yourCommandName">
<c:if test="${errors.hasFieldErrors('username')}">
<c:set var="errorClass" value="error" />
</c:if>
</spring:hasBindErrors>
<div class="control-group <c:out value='${errorClass}' />">
Изменить после комментариев:
Внутри тега <spring:hasBindErrors>
есть переменная errors
(см. errors
интерфейс), привязанная к фактическим ошибкам привязки. Вы можете проверить, есть ли у поля ошибки с помощью errors.hasFieldErrors(fieldName)
.
И действительно непонятным способом получения полевых ошибок без какого-либо тега является requestScope['org.springframework.validation.BindingResult.yourCommandName'].hasFieldErrors('username')
...
Ответ 3
Существует лучший способ получить сообщение об ошибке
<spring:hasBindErrors name="yourCommandName">
${errors.hasFieldErrors('userId') ? errors.getFieldError('userId').defaultMessage : ''}
</spring:hasBindErrors>
И один вкладыш
${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('emailId') ? requestScope['org.springframework.validation.BindingResult.user'].getFieldError('emailId').defaultMessage : ''}