Весенний портлет MVC. Проверка перед @ResourceMapping. @ResourceMapping -> @RenderMapping - PullRequest
3 голосов
/ 03 мая 2011

Мой случай: пользователь может скачивать файлы.Есть список файлов, которые он может выбрать.Существует пружинное сопоставление:

@ResourceMapping(DOWNLOAD)
public void downloadSelected(ResourceRequest request, ResourceResponse response, AuditView auditView, BindingResult bindingResult) {
}

auditView имеет список файлов.

Если пользователь не выбрал ни одного, мне нужно проверить и отобразить ту же страницу с ошибкой.

я могу проверить: validator.validate(auditView, bindingResult);

Вопрос в том, как перейти к фазе рендеринга в случае ошибок?

Ответы [ 3 ]

0 голосов
/ 27 июня 2013

Возможно, уже поздно ответить, но это может быть полезно для других.

Невозможно переслать Request на RenderPhase с ResourcePhase.

Пожалуйста, обратитесь к этой ссылке для решения аналогичного требования.

0 голосов
/ 09 марта 2016

Я проверял это только с контейнером портлета WebSphere Liberty Profile, поэтому не знаю, работает ли он с другими контейнерами:

@ResourceMapping
public void downloadSelected(@Valid @ModelAttribute("entity") Entity entity, BindingResult bindingResult, ResourceResponse response)
{
   if (bindingResult.hasErrors()) {
      response.setProperty(ResourceResponse.HTTP_STATUS_CODE, "302");
      response.setProperty("Location", response.createRenderURL().toString());
   } else {
      response.setContentType("application/pdf");
      response.setProperty("Content-disposition", "attachment; filename=\"mydownload.pdf\"");
      /* ... */
   }
}

Однако, похоже, что результат привязки теряется и сообщения об ошибках не отображаютсяне появляется на этапе рендеринга, если используется тег <form:errors /> JSP Spring MVC.

0 голосов
/ 15 июня 2012

просто проверьте наличие ошибок, верните представление формы и аннотируйте AuditView аннотациями @Valid и @ModelAttribute.@Valid аннотация будет запускать метод проверки валидатора контроллера.@ModelAttribute поместит AuditView в модель.

@ResourceMapping(DOWNLOAD)
public void downloadSelected(ResourceRequest request, ResourceResponse response,@Valid @ModelAttribute("auditView") AuditView auditView, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
        return "thedownloadpage";
    } 
...