Я пишу веб-приложение на основе Spring 3 MVC, используя JSP для моего уровня представления. Я борюсь с определенной областью, где пытаюсь сообщить об ошибках BindingResult для определенного объекта модели в JSP. Это, вероятно, лучше всего объясняется соответствующим кодом:
Это мой метод контроллера Spring:
@RequestMapping(value = "/**", method = RequestMethod.GET)
public ModelAndView get(@ModelAttribute("xApiRequest") @Valid final XAPIRequest xApiRequest,
final BindingResult xapiBindingResult,
final HttpServletResponse response,
Model model) throws EntityNotFoundException {
String viewName = "/WEB-INF/views/get-single-entity.jsp";
/*
* Create a MAV passing in the original Model object which contains:
* 1: The 'xApiRequest' @ModelAttribute object.
* 2: The BindingResult for the 'xApiRequest' object.
*/
final ModelAndView mav = new ModelAndView(viewName, model.asMap());
final XAPIResponse<Resource> xApiResponse = buildXAPIResponse(false, 200, xApiRequest, null);
response.setStatus(200);
mav.addObject("xApiResponse", xApiResponse);
return mav;
}
Когда я выполняю этот метод, я вижу следующее:
- Объект xApiRequest создается правильно из HttpServletRequest (у меня есть отдельный метод, который делает это)
- Проверка JSR-303, вызванная аннотацией @Valid, имела место и выявила 2 ошибки проверки, они представлены как объекты BindingResult, как я и ожидал.
- Объекты BindingResult присутствуют в параметре метода Model.
- Объекты xApiRequest и BindingResult успешно передаются из параметра метода Model в объект ModelAndView, возвращаемый методом.
И я могу подтвердить, что содержимое BindingResult правильно идентифицирует объект xApiRequest как источник ошибок проверки:
{xApiRequest=com.stretchr.xapi.entity.request.XAPIRequest@1e28608, org.springframework.validation.BindingResult.xApiRequest=org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'xApiRequest' on field 'userId': rejected value [null]; codes [NotEmpty.xApiRequest.userId,NotEmpty.userId,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [xApiRequest.userId,userId]; arguments []; default message [userId]]; default message [may not be empty]
Field error in object 'xApiRequest' on field 'projectId': rejected value [null]; codes [NotEmpty.xApiRequest.projectId,NotEmpty.projectId,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [xApiRequest.projectId,projectId]; arguments []; default message [projectId]]; default message [may not be empty]}
И JSP выглядит так:
<%@ page contentType="application/json; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<%@ page session="false" %>
<spring:hasBindErrors name="xApiRequest">
</spring:hasBindErrors>
<c:if test="${errors}">
<json:object name="exceptions">
<json:property name="exceptionCount" value="${errors.errorCount}" />
<json:property name="globalExceptionCount" value="${errors.globalErrorCount}" />
<c:forEach var="error" items="${errors.allErrors}" varStatus="index">
<json:property name="${index}" value="${error.defaultMessage}" />
</c:forEach>
</json:object>
</c:if>
Независимо от того, что я делаю, я не могу получить вызов, чтобы распознать, что объект модели xApiRequest имеет ошибки привязки, поэтому вывод JSP не содержит объект exceptions содержащий подробную информацию об ошибках:
{
w: false
s: 200
c: ""
r: {
o ~path: ""
}
}
Может ли кто-нибудь увидеть, что я делаю неправильно здесь? В противном случае я могу отладить то, что происходит во время обработки JSP? Я очень хочу отладить taglib Spring, но не совсем уверен, как сделать связь между taglib и соответствующим фрагментом кода.
Надеюсь, что я предоставил достаточно информации здесь, но если требуется что-то еще, не стесняйтесь спрашивать.
Большое спасибо,
Эдд