Сопоставление запросов 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

Другие вопросы по тегам