2013-10-24 40 views
6

jQueryからstruts2アクションクラスにデータを送信する際に問題が発生しました。 私は質問を見た:JSON Jquery to Struts2 actionしかし、私は非常によく解決策を理解していません。私はStruts2のアクションクラスにJSONデータを送信したいjQueryを使用してJSONデータをStruts2アクションクラスに投稿する方法

[{"id":"1","code":"111","name":"ddd"}, 
{"id":"2","code":"222","name":"sss"}, 
{"id":"3","code":"333","name":"eee"}] 

JSON配列がこのようなものです:

は、ここに私の問題です。 jQueryのコードは次のようである:

var data = JSON.stringify(dataObj); 
$.ajax({ 
    url: "Update", 
    type: "post", 
    data: data, 
    dataType: 'json', 
    contentType:"application/json;charset=utf-8", 
    success : function(){ 
    alert("You made it!"); 
    } 
}); 

しかし、Chromeの開発ツールで、私は、サーバー側に提出されたデータを見てきました。しかし、サーバー側では、jsonデータの受信方法がわかりません。

処置:このように

public class Update extends ActionSupport{ 
    private String data; 

    public String getData(){ 
     return data; 
    } 

    public void setData(String data){ 
     this.data= data; 
    } 

    public String execute(){ 
     System.out.println(data); 
     return SUCCESS; 
    } 
} 

dataはnullです。

また、リストを使用してJSONデータを受け取ろうとしました。 "データ"タイプを文字列からList<Node>に変更すると、再度失敗しました。私はStruts2が使用しているOGNLモデルをあまり理解していない可能性があります。

私を助けてください。どうもありがとうございました!

+0

JSONプラグインを使用していますか? –

+0

はい、私はプラグインに慣れていません。 –

答えて

8
{"id":"1","code":"111","name":"ddd"} 

ステップ1:MyBeans

public class Update extends ActionSupport{ 
    private List<MyBean> data; 

    //other code, getters & setters 
} 
のリストを受け取るためにあなたの行動のコードを変更:上記のフィールドに

class MyBean{ 
    String id,code,name; 
    //getters & setters 
} 

ステップ2をカプセル化/蓄積する豆/ POJOを作成します。

ステップ3:JSONデータを逆シリアル化してアクションを入力するようにアクションを設定するフィールド(使用JSON-プラグイン)

<action name="Update" class="Update"> 
     <interceptor-ref name="defaultStack"/> 
     <interceptor-ref name="json"> 
      <param name="enableSMD">true</param> 
     </interceptor-ref> 
</action> 

ステップ4:AJAXリクエストボディに必要な変更を加え、上記のコードがテストされていないアクションのparams /フィールド

var data = JSON.stringify(dataObj); 
$.ajax({ 
    url: "Update", 
    type: "post", 
    data: "data:"+data, 
    dataType: 'json', 
    contentType:"application/json;charset=utf-8", 
    success : function(){ 
    alert("You made it!"); 
    } 
}); 

に一致するように送信されます。

+1

実際にあなたの提案は機能しています!しかし、私は別の問題に遭遇します。私はJSONインターセプターにデータを送ることができます。しかし、インターセプタは例外として、自分の入力がJSON(無効なchar d)であると言っています。 JSONインターセプターがJSONオブジェクトを読み込んでいると思います。私のJSONデータの最初の単語が "データ"なので、問題が発生していると思います。 –

+0

そして、データを設定ファイルに追加してルートオブジェクトを指定します。それでも、うまくいかず、「無効なルート表現: 'data'」と報告されます。何か案は?どうもありがとうございました! –

+0

送信されている正確なデータを投稿してください。 –

1

こんにちは問題は、オブジェクトの配列を直接投稿していることです。だからStruts2は呼び出すメソッドを知らない。以下のようにjsonデータを変更します。その後、それは動作します。

セッター内部次に
{"data":[{"id":"1","code":"111","name":"ddd"}, 
"id":"2","code":"222","name":"sss"}, 
{"id":"3","code":"333","name":"eee"}]} 

は、報告書は、それがセッターとゲッターを持つメンバーだとしてJavaクラスは、ID、コード、名前が含まれているオブジェクト

public void setData(List <Report> data) { 
    System.out.println("Setter Call Flow"); 
    this.data = data; 
} 

で読み取ります。

関連する問題