处理不是Action请求的Multipart请求?

时间:2011-01-25 16:52:33

标签: spring-mvc request portlet multipart

我一直在考虑是否可以处理不是Action请求的Multipart请求。有一个原因让我觉得不可能:

  

只有ActionRequest实现   getFile()有种方法。我不能   找到如何获取文件的简单方法   超出行动以外的请求   请求

如果我不使用html表单上传文件并且我不希望在操作请求之后呈现视图,那么该怎么办 - 渲染阶段始终在操作阶段之后发生。

如果我想通过ajax创建一个post请求(带文件)并使用@ResourceMapping处理程序,该怎么办?如何从ResourceRequest中获取它?

非常感谢你的想法。

1 个答案:

答案 0 :(得分:1)

这是“模式”,它是处理多部分请求的最佳方式

来自视图层的操作请求转到此方法:

@ActionMapping(params = "javax.portlet.action=sample")
public void response(MultipartActionRequest request, ActionResponse response) {
    response.setRenderParameter("javax.portlet.action", "success");
    List<MultipartFile> fileList = request.getFiles("file");
}

渲染阶段如下:

@RequestMapping(params = "javax.portlet.action=success")
public ModelAndView process(RenderRequest request, Model model) throws IOException {
    Map map = new HashMap();
    map.put("test", new Integer(1));
    return new ModelAndView("someView", map);
}

您创建了一个“bean”视图:

@Component("someView")
public class SomeView extends AbstractView {
    private Logger logger = Logger.getLogger(SomeView.class);

    @Override
    protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response)
            throws Exception {
    logger.info("Resolving ajax request view - " + map);
    JSONObject jsonObj = new JSONObject(map);
    logger.info("content Type = " + getContentType());
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(jsonObj.toString());
    response.getWriter().flush();
    }
}

将BeanNameViewResolver添加到servlet / portlet上下文中:

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1" />