3

我的情况:用户可以下载文件。有一个他可以选择的文件列表。有一个弹簧映射:

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

auditView有一个文件列表。

如果用户没有选择任何我需要验证并显示显示错误的同一页面。

我可以验证:validator.validate(auditView, bindingResult);

问题是如何在出现错误的情况下转发到渲染阶段?

4

3 回答 3

0

回答可能会迟到,但是,这可能对其他人有帮助。

您无法转发Requestto RenderPhasefrom ResourcePhase

请参阅此链接以获取类似要求的解决方案。

于 2013-06-27T15:02:20.597 回答
0

我只使用 WebSphere Liberty Profile 的 portlet 容器对此进行了测试,所以我不知道它是否适用于其他容器:

@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 标记,绑定结果似乎会丢失并且错误消息不会出现在渲染阶段。

于 2016-03-09T08:53:59.730 回答
-1

只需检查错误并返回表单视图并使用 @Valid 和 @ModelAttribute 注释对 AuditView 进行注释。@Valid 注解将触发控制器验证器的验证方法。@ModelAttribute 会将 AuditView 放入模型中。

@ResourceMapping(DOWNLOAD)
public void downloadSelected(ResourceRequest request, ResourceResponse response,@Valid @ModelAttribute("auditView") AuditView auditView, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
        return "thedownloadpage";
    } 
于 2012-06-14T20:08:54.617 回答