2011-08-11 6 views
2

私はjqueryのを使用して、AJAX要求を行うが、これは以下の春コントローラを呼び出します。ajaxリクエストを使用して、春のコントローラからビューを返すにはどうすればよいですか?

@RequestMapping(value = "/dialogController", method = RequestMethod.POST) 
public String dialogController(Model model, @RequestBody MyClass myclass) { 
    myClass.setTitle("SUCCESS");  
    model.addAttribute("myClass",myClass); 
    return "dialogContent"; //this resolves to dialogContent.jsp 
} 

私は、次のエラーが表示さしかし:

org.springframework.web.HttpRequestMethodNotSupportedException: 
Request method 'POST' not supported 

とし、ここで必要な私が使用して作っていますAJAX呼び出しの場合jQueryの:

jq.postJSON("/dialogController", myClass, function(data) { 
     myDialog.html(data); 
     myDialog.dialog('open'); 
     //dialog settings previously assigned, 
     //but the success callback function is not reached anyway 
    }); 

EDIT 私は同じエラーを取得し、私たちの場合e:

jq.ajax({ 
    type: 'POST', 
    url: "/dialogController", 
    data:myClass, 
    success: function(data) {    
     previewDialog.html(data); 
     previewDialog.dialog('open'); 
    }); 
+0

あなたはJSONを投稿する残りのクライアントを使用する場合、それは正常に動作しませんデータ?また、dialogControllerの}間違い?また、あなたはjavascriptライブラリを使用していますか?もしそうなら、どちらですか? – Ali

+0

@Aliはい、スペルミスでした。残りのクライアントを試していない、それはエラーが春のコントローラで発生するように違いがありますか?同様の要求をしても、json/myclassパラメータを削除した場合と同じエラーです。 – NimChimpsky

+0

@RequestMappingアノテーションにAccept = "text/html、application/json"を追加しようとしましたか?私がRestClientを推奨している理由は、渡された "受け入れ"値が何であったかを見ることができ、それを変更してエラーがまだ発生しているかどうかを調べることができるからです。 – Ali

答えて

2

家庭の視聴者について...問題は、コントローラで定義されたメソッドシグネチャがajax呼び出しと一致しないことが原因であることがわかりました。コントローラメソッドからModel modelパラメータを削除しました。私はまた、新しいモデルと視点も戻さなければならないことを認識しました。ここでの作業コードは次のとおりです。

var myJSON = {"title":"help"}; 
myJSON = JSON.stringify(myJSON); 

<c:url var="postAndView" value="/PostJSONMAV" /> 
... 
jQuery.ajax({ 
    type: 'POST', 
    url: "${postAndView}", 
    data:myJSON, 
    contentType: "application/json", 
    success: function(data) {   
     previewDialog.html(data); 
     previewDialog.dialog('open'); 
    } 
}); 

私はAJAX呼び出しに変更はなくjQuery.postJSON()はおそらくaswell動作します。そして、以下のようにcorrrectlyモデル化するための新しいオブジェクトを追加し、ダイアログで開かれるJSPページを、返す新しいコントローラコード、次のとおりです。

@RequestMapping(value = "/PostJSONMAV", method = RequestMethod.POST) 
public ModelAndView postJSON(@RequestBody MyClass myClass) { 
    ModelAndView mav = new ModelAndView(); 
    myClass.setTitle("SUCCESS"); 
    mav.setViewName("dialogContent"); 
    mav.addObject("myClass", myClass); 
    return mav;  
} 
関連する問題