我正在努力处理表单上的文件上传:使用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”方法...
知道我们如何(简单地)解决这个问题吗?我已经花了很长时间在它上面,我发现自己没有灵感(也许是因为它是一天的结束,也是:)。
感谢您的帮助,
亲切的问候
答案 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);
}
...
}