Ajaxって奥が深い
サーバサイドの戻り値の返し方をどうやって楽ちんにしようかと考えていた。要求はサーバサイド(Java)の戻り値はPOJOがイイ。戻り値を受け取るJavaScript側のコーディングは極力減らしたい。これだけ。楽することばっかり(笑)
戻り値はこうしようかと思っていた「1.POJO→2.XML→3.JSON」。別になんにも難しくないけど、これだとクライアントの方にコーディングが必要なんだよなぁと。うけとった戻り値から値を取り出して、更新対象のオブジェクトをちょこちょこ操作してあげないといけない。間にXMLを介しているのは、単純にXML→JSONのライブラリがあるから。
public class MakerSelectOption extends JSONOption { private String text; private String value; }
これをJSONにしてJavaScriptで受け取ったとしよう。はしょりまくりだけどやりたい事はサーバの戻り値でオブジェクトをごっそり入れ替えてしまうのは無理なんだろうかという事。JavaScriptで作成したオブジェクトは代入できているけど、JSONだとダメなのは何かが足りないからだろう…。
document.forms[0].selectObject.options = eval(xmlhttp.responseText);
でも入れ替えるだけならJSONである必用はなくて「1.POJO→2.HTML」にして
document.getElementById("selectObject").innerHTML = xmlhttp.responseText;
としてしまえばいいわけだ。これならサーバサイドでHTMLのテンプレートを作れば楽ちんだけど一部分だけを書き換えたりするAjaxには使いづらい。
というわけで思い立ったからすぐ実行してみて、すぐ現実に戻されたorz
次のシステム開発の設計時にAjaxを盛り込んでみようかと思ってる。階層的なデータを絞り込むために使うドロップダウンリストあたりに適用すると画面全体の再読込みが減らせるので是非とも採用したい。非常に部分的なものでかまわないし、全体的に使うつもりもない。使うと効果覿面の所だけ提案したいと思う。
そうするためには設計・開発・テストにわたってどういう影響があるかを考え中。設計は問題ないと思うけど、Ajaxである事を明示するのが難しいなと。そこで共通部品として提供する。開発者は特に意識する事なく設計者から指定されたコンポーネントを使えばいい。テストは画面がリロードされないだけで、従来どおりでかまわないだろうけど、画面遷移してそのあと戻ってきた時に状態を復元させる事も考えないといけない。
書いててこんがらがってきた(@_@;)なに言ってるのかまとまってない(苦笑)頭の中だけじゃ間に合わないので紙に書き始めようー。