Сопоставление запросов Spring MVC FlashMap и RedirectAttributes - PullRequest
3 голосов
/ 17 октября 2011

Вчера я скачал новую версию Spring 3.1RC, чтобы проверить только что введенную поддержку переменных области действия Flash в Spring MVC. К сожалению, я не смог заставить его работать ...

У меня есть HTML-форма, содержащая некоторые флажки без тегов spring: forms. Примерно так:

<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 Ответ

4 голосов
/ 18 октября 2011

Чтобы использовать новые 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...