Я пишу веб-приложение на основе Spring 3 MVC, используя JSP для своего слоя представления. Я борюсь за конкретную область, где я пытаюсь сообщить об ошибках BindingResult для конкретного объекта Model в JSP. Это, вероятно, лучше всего объяснить с помощью соответствующего кода:
Это мой метод Spring Controller:
@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 не содержит исключений объект, содержащий подробную информацию об ошибках:
{
w: false
s: 200
c: ""
r: {
o ~path: ""
}
}
Кто-нибудь может увидеть, что я здесь делаю не так? В противном случае я могу отладить, что происходит во время обработки JSP? Я заинтересован в отладке библиотеки тегов Spring, но не совсем уверен, как установить связь между библиотекой тегов и соответствующим фрагментом кода.
Надеюсь, я предоставил здесь достаточно информации, но если потребуется больше, не стесняйтесь спрашивать.
Большое спасибо,
Edd