表单上的文件上传:使用Spring Roo进行更新

时间:2012-08-28 18:17:40

标签: file-upload spring-roo updatemodel

我正在努力处理表单上的文件上传:使用spring roo进行更新。

对于创作部分,我使用了形式:Jose Delgado here提供的多标签。自定义表单:多标签将enctype =“multipart / form-data”添加到表单中,并且工作正常。

问题在于您希望为更新表单提供文件上载功能。 Spring Roo(也许是春天的mvc,我不知道)默认情况下会将enctype =“application / x-www-form-urlencoded”设置为更新表单(form:update tag)。如果我在上传表单中将enctype属性设置为enctype =“multipart / form-data”,则在提交表单时,服务器将执行控制器的“create”方法而不是“udpate”方法...

知道我们如何(简单地)解决这个问题吗?我已经花了很长时间在它上面,我发现自己没有灵感(也许是因为它是一天的结束,也是:)。

感谢您的帮助,

亲切的问候

1 个答案:

答案 0 :(得分:3)

好的......似乎RequestMapping存在一些问题。

无论出于何种原因,当multipart属性在以下形式中设置为“true”时,方法参数设置为“POST”:update tag。

作为一种解决方法,我在create方法的开头检查_method参数。如果设置为“PUT”,则返回更新方法的值。

    @RequestMapping(method = RequestMethod.POST, produces = "text/html")
    public String create(@Valid ActionRequest actionRequest, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {

        // Work around dispatcher bug: if the multipart attribute of the form is set to true,
        // submission of the update form routes to create method
        String toto = httpServletRequest.getParameter("_method");

        if(httpServletRequest.getParameter("_method").equals("PUT")){
            return this.update(actionRequest,bindingResult,uiModel,httpServletRequest);
        }
   ...
}