DWRでjavascriptからjavaにObjectを渡す方法

今日バイトでやったことをまとめる。DWRでクライアント(javascript)からサーバー(java)にJavaオブジェクトを渡す方法が分からなかった。オブジェクトを渡すていってもフィールド値をもったクラスのことで、値がjava側に行ってくれればいい。でまず考えたのは以下の3つぐらいで、

  1. JSONで渡してjava側でクラスにデコードする
  2. javascript連想配列で渡してjava側でクラスのフィールドに詰めなおす
  3. javascriptで配列かなんかで渡したものがjava側でオブジェクトで受け取れないか

まず、1と2を考えやってみたけどうまくいかず、もっと調べたら3ができることが分かった.
javascriptjavaフィールド名と同じ名前で連想配列を作ってjavaに渡せばオブジェクトを生成してくれる。

(例)

ajax通信で通るオブジェクトはconvertにすべて定義しておく。ここでconverter値はJavaBeanの場合は"bean"、それ以外は"object"としておくこと。またprivateフィールドにアクセスした場合はparamを"true"にしておく。











渡したいオブジェクト(ここではTestBean)と同じ名前で連想配列を作ってDWRで渡す。


var feeld = {name:'taizou',from:'japan',age:'23',stay:'tokyo'}
Test.getProfile(feeld , function( beck_data ){
//beck_dataでなにかやる
});

渡したい対象物。


class TestBean{
private String name;
private String from;
private int age;
private String stay;

////各自のプログラムを書く
}
サーバー側の処理。
class DWRTest{
public Object getProfile( TestBean bean ){
/////受け取ったbeanでなにかする
}
}

てかこんなことがDWRでできないんだったら使う意味がないか。DWRでは連想配列はクラスとみなしてコンバートしてくれるらしく,JSONを渡すと区別がつかないのかな?
javascriptでは下の2つたとも連想配列だが、2番目の連想配列JSON形式にもなる。


{name:"taizou",from:"japan",age:"23",stay:"tokyo"}

{"name":"taizou","from":"japan","age":"23","stay":"tokyo"}

ここれ辺がjava側でJSONがデコードできなかった原因かもしれない。(単にJSONICの使い方が間違ってるのかも。。。。)
(参考サイト)
DWRでリッチなWebページを作る!(5) - 引数と戻り値にJavaBean以外のクラスを使用する