Сопоставление запросов Spring MVC FlashMap и RedirectAttributes
Вчера я скачал новую версию Spring 3.1RC, чтобы проверить только что представленную поддержку переменных в области Flash в Spring MVC. К сожалению, я не мог заставить это работать...
У меня есть HTML-форма, содержащая некоторые флажки без тэгов: формы. Что-то вроде этого:
<form action="/deleteaction" method="post">
<input type="checkbox" name="itemId" value="1" />
<input type="checkbox" name="itemId" value="2" />
<input type="submit" name="delete" value="Delete items" />
</form>
До поддержки области действия Flash мой аннотированный контроллер выглядел следующим образом:
@RequestMapping(value = "/deleteaction", method = RequestMethod.POST, params={"delete"})
public String deleteItems(@RequestParam(value="itemId", required=false) String itemId[]) {
В качестве альтернативы, я мог бы использовать HttpServletRequest
вместо @RequestParam
:
@RequestMapping(value = "/deleteaction", method = RequestMethod.POST, params={"delete"})
public String deleteItems(HttpServletRequest request) {
String itemIds[] = request.getParameterValues("itemId");
Оба метода работали нормально. Если я попытаюсь добавить RedirectAttributes
к параметрам метода Spring выдаст исключение:
@RequestMapping(value = "/deleteaction", method = RequestMethod.POST, params={"delete"})
public String deleteItems(@RequestParam(value="itemId", required=false) String itemId[], RedirectAttributes redirectAttrs) {
Журнал:
Oct 16, 2011 11:20:37 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/App] threw
exception [Request processing failed; nested exception is
java.lang.IllegalArgumentException: argument type mismatch] with root cause
java.lang.IllegalArgumentException: argument type mismatch
Что я делаю неправильно? Как можно получить параметр RedirectAttribues, куда добавлять переменные области видимости flash?
1 ответ
Для того, чтобы использовать новый RedirectAttributes
, Старый DefaultAnnotationHandlerMapping
, AnnotationMethodHandlerAdapter
а также AnnotationMethodHandlerExceptionResolver
должны быть заменены в dispatcher-servlet.xml
,
Один шанс заключается в использовании <mvc:annotation-driven/>
, который в Spring 3.1 настраивает новые классы RequestMappingHandlerMapping
, RequestMappingHandlerAdapter
, а также ExceptionHandlerExceptionResolver
заменяя старые.
В противном случае новые классы обработчиков должны быть явно настроены в dispatcher-servlet.xml
,
Некоторая дополнительная информация здесь: http://forum.springsource.org/showthread.php?115976-Spring-MVC-FlashMap-and-RedirectAttributes-request-mapping