2014-03-12 37 views
0

我在我的Spring mvc中使用jQuery提交表单。表单提交,不正确地调用弹簧控制器

这是jquery调用提交表单。

function uploadJqueryFormForEdit(documentId){ 
    alert("ccc"); 
    $('#result').html(''); 

    $("#editDocumentForm").ajaxForm({ 
    success:function(data) { 
     alert("ddd"); 
      $('#result').html(data); 
      alert("eee"); 
      //getProjectSegment('documents','DocumentSegment',projectId); 
      $('#editDocumentForm').remove(); 
    }, 
    error:function(e){ 
      alert(e.responseText); 
      $("#msgDiv").html('Error'); 
     }, 
    dataType:"text" 
    }).submit(); 
} 

这就是我要提交的表单。

<form action="cont/uploadEdit?documentId=15&projectId=2" name="editDocumentForm" id="editDocumentForm" enctype="multipart/form-data" method="post"> 

当我在动作url中使用一个参数,例如。

action="cont/uploadEdit?documentId=15" 

它工作正常。但是当我用两个参数

action="cont/uploadEdit?documentId=15&projectId=2" 

它不叫控制器方法正确(不打这个方法在所有)

这里控制器方法

@RequestMapping(value = "cont/uploadEdit", method = RequestMethod.POST) 
     public @ResponseBody String uploadEdit(@ModelAttribute("sessionId") String sessionId,@RequestParam("documentId") int documentId,@RequestParam("projectId") int projectId,MultipartHttpServletRequest request, HttpServletResponse response, UploadedFile fileDetail,UserBean userbean,Model model) throws SessionException { 
      logger.info("uploadEdit"); 

}

为什么我不能在动作标签中使用两个参数?

这是工作的罚款与第一动作

@RequestMapping(value = "cont/uploadEdit", method = RequestMethod.POST) 
     public @ResponseBody String uploadEdit(@ModelAttribute("sessionId") String sessionId,@RequestParam("documentId") int documentId,MultipartHttpServletRequest request, HttpServletResponse response, UploadedFile fileDetail,UserBean userbean,Model model) throws SessionException { 
      logger.info("uploadEdit"); 
} 
+0

您是否配置了MultiPartResolver? –

+0

@ArunPJohny,是的MultiPartResolver配置正确。它适用于一个参数。 – Channa

+0

尝试发送数据为'data:$('#editDocumentForm')。serialize()+“&par1 = 1&par2 = 2&par3 = 232”'并且让我知道。 –

回答

0

发现错误的控制器方法:

在我们的形式为要提交(在我的情况下“editDocumentForm”)应该没有任何其他输入标记与动作url变量具有相同的名称,

例如,如果有这样的事情,

<input type="hidden" id="projectId" name="projectId" value="somevalue"/> 

就会使冲突。所以确保不发生冲突。

0

添加params = {"documentId", "projectId"}属性的RequestMapping注释

@RequestMapping(value = "cont/uploadEdit", params = {"documentId", "projectId"}, method = RequestMethod.POST) 
      public @ResponseBody String uploadEdit(@ModelAttribute("sessionId") String sessionId,@RequestParam("documentId") int documentId,@RequestParam("projectId") int projectId,MultipartHttpServletRequest request, HttpServletResponse response, UploadedFile fileDetail,UserBean userbean,Model model) throws SessionException { 
       logger.info("uploadEdit"); 
+0

是否总是需要这样做?不会它自动地认为,因为它的属性集有要求的值? – prime

+0

实际上它是缩小要处理的参数。我期望的是,第二个动作调用'action =“cont/uploadEdit?documentId = 15&projectId = 2”'正常工作,但第一个不行。由于'required = false'定义不以这种方式出现@RequestParam(value =“projectId”,required = false)int projectId'。为了隐式定义参数,建议使用'params'。 –

+0

@CahitGungor,实际上当它正确工​​作,控制器方法不同于上面,我发布了控制器方法,不起作用。添加了一个参数正确工作的控制器方法。 编辑了这个问题。 – Channa