2011-01-25 52 views
1

我一直在想,如果有可能處理不是一個行動請求的多部分請求。有一個原因對我來說似乎是不可能的:處理不是動作請求的多部分請求?

只有ActionRequest實現了 getFile()類的方法。我不能 找到任何簡單的方法如何獲取文件 出比行動 要求

如果我不使用什麼HTML表單上傳文件的其他請求,我不想視圖在動作請求之後呈現 - 呈現階段總是在動作階段之後發生。

如果我想通過ajax創建一個post請求(帶有文件)並使用@ResourceMapping處理程序,該怎麼辦。我如何從ResourceRequest中取出它?

非常感謝您的想法。

回答

1

這是「模式」,也就是AFAIK的處理多從視圖層請求

動作請求的最佳方式進到這個方法:

@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" />