0

jqueryから投稿しています。POST が発生していますが、コントローラーによって追加されたモデル属性にアクセスできません。

JQuery コード:

$.post('<c:url value="/savedLog.form" />', $('#logForm').serialize(), function(data, textStatus) {
    var jsonlog = "${logJson}"
    if (data === "SUCCESS") {
        alert(jsonlog);
    }
});

コントローラ:

public String savedLog(@RequestParam(value = "requestId", required = true) LogRequest request, ModelMap model) throws IOException 
{
    try 
    {
        //Code to populate log            
        model.addAttribute("logJson", log.getLog());
        return "success";
    }​
}

POSTは正常に動作し、コントローラーメソッドも正常に実行されています。実際のコードにはキャッチがあります。冗長であるため削除されました。

何が問題になる可能性がありますか。この行は機能しません。var jsonlog = "${logJson}" モデル属性または jquery に問題はありますか?

ありがとうございました。

4

1 に答える 1

0

ページを生成するリクエスト (AJAX フォームを含む) と、AJAX POST が発生したときに呼び出されるリクエストを混同しているようです。

var jsonlog = "${logJson}"

最初の(ページ)リクエストでのみ入力されます。AJAX POST は、レンダリング後にページに JSTL 値を挿入できません。

AJAX POST からの応答でその値をテキストまたは JSON データとして送信dataし、.POST コールバックの var からそれを読み取る必要があります。注釈を追加して、@ResponseBodySpring に JSON を返し (Jackson ライブラリの追加が必要になる場合があります)、Map を返すように指示します ...

public @ResponseBody Map<String, String> savedLog(@RequestParam(value = "requestId", required = true) LogRequest request, ModelMap model) throws IOException {
try {
    //Code to populate log            
    //model.addAttribute("logJson", log.getLog());
    Map <String, String> map = new HashMap<String, String>();
    map.put("logJson", log.getLog());
    return map;
}​

次に、AJAX コードで次のように読みます。

$.post('<c:url value="/savedLog.form" />', $('#logForm').serialize(), function(data, textStatus) {

    if (data.logJson) {
        alert(data.logJson);
    }
}, "json"); // Note JSON dataType specified here

注: コントローラーから "SUCCESS" をテキストとして返すべきではありません。これには HTTP コードを使用します。たとえば、エラーが発生した場合は (HttpServletResponse オブジェクトを介して) 404 または 500 をスローします。それ以外の場合は、マップを返すときにステータスが自動的に 200 になります。

于 2012-09-14T01:26:22.587 に答える