2014-03-12 109 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