DWR(4)

あまりAjaxというか非同期的なネタじゃないような気もするが一応見てみる。主な話題は

  • DWRUtil.setValues()
  • DWRUtil.getValues()

を使うとJavaBeansのプロパティとHTML要素を自動的にbindingしてくれる、ということ。

このページをloadするとinit()が実行され、そこからDemo.getExamplePerson()が呼び出される。

function init()
{
  DWRUtil.useLoadingMessage();
  readPerson();
}

function readPerson()
{
  Demo.getExamplePerson(fillForm);
}

サーバ側のgetExamplePerson()は何らかのPersonオブジェクトを返してくる。その結果はfillForm関数に渡され、DWRUtil.setValues()によりプロパティ名("name", "salary", "id", "address")と同じidを持つフィールドにセットされる。この辺の仕組みはソースを見るとわかるけど、setValues()はDWRUtil.setValue()を使っている。

function fillForm(aperson)
{
  person = aperson;
  DWRUtil.setValues(person);
}

反対にDWRUtil.getValues()は引数で渡されたMapオブジェクトが持つキーに該当するidを持つHTML要素の内容を、このオブジェクトにセットする。これも内部ではDWRUtil.getValue()を使っている。

function writePerson()
{
  DWRUtil.getValues(person);
  Demo.setExamplePerson(null, person);
}

ちなみにこの例のようにサーバ側とJavaBeansで受け渡しをする場合には、dwr.xml

<convert converter="bean" match="そのJavaBeansのクラス名"/>

という記述を追加しないと「No converter found for HOGEHOGE」というエラーになりうまく行かない。convertの意味についてはこちらを参照。