Весенний портлет MVC. Проверка перед @ResourceMapping. @ResourceMapping -> @RenderMapping

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

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

auditView содержит список файлов.

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

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

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


person user657009    schedule 03.05.2011    source источник


Ответы (3)


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

Вы не можете переслать Request RenderPhase от ResourcePhase.

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

person Niranjan    schedule 27.06.2013

Я тестировал это только с контейнером портлетов 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\"");
      /* ... */
   }
}

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

person fishbone    schedule 09.03.2016

просто проверьте наличие ошибок и верните представление формы и аннотируйте 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";
    } 
person Josef Procházka    schedule 14.06.2012
comment
Метод void, поэтому вы не можете вернуть String. - person StaNov; 26.01.2015