AjaxFW 解説

さて、昨日公開したAjaxFWの解説だ。

まず、概要から。
前回とほとんど変わってないけど。
基本はHTMLからの送信となる。
Ajaxを生で使う場合は、送信データを作ってやる必要があるが、
そこはこのFWが勝手にやってくれる。
通常のformを書く要領で、
<form action="[serverProcess]" method="[get or post]">
<input type="hidden" name="bean" value="action"/>
<input type="button" value="送信" onclick="doSubmit(this, null)"/>
</form>
これが最低限の送信処理の書き方。

送信データはformタグ内のinputやらselectの情報を自動的に送信するようになっている。

まず。formタグの属性から
actionにはコアライブラリにある処理クラス(Servlet)を指定する。
JavaModuleの場合は AjaxFrameworkServlet
PHPModuleの場合は ActionProcess.php
へのパスとなる。

methodには、通常のformと同じく getもしくはpostを指定する。
必須なので注意。

あと、Ajax処理をしたいところにon〜イベントを書く。
処理はdoSubmit(this, コールバック関数);
となる。コールバック関数はnullの場合はコールバックを行わない。
実際コールバックを行うときは
<script>
function callBackFunction(oj) {
・・・
}
</script>
・・・・・・・
doSubmit(this, callBackFunction);
となる。コールバック関数の引数には、レスポンスの連想配列が入っている。

あとは、hiddenで定義されているnameがbeanのやつ。
これだけは必須。処理クラスを指定する。
Javaの場合は、完全クラス名で
PHPの場合は、
ActtionProcess.phpの場所からのパスになるが、ちょっと複雑なので後述。
区切り文字は/ではなく.になる。
例えば、
framework/core以下にActtionProcess.phpがある場合、
デフォルトで2階層上を見るようになっている。
なので、
frameworkフォルダと同じ階層にある
actions/TestAction.class.php
を処理クラスとしたい場合、
actions.TestAction
と指定をする。
また、ファイル名は必ず〜.class.phpにする必要がある。
また、継承をしていないが、
メソッド
function execute($request, & $responseBuilder);
を実装する必要がある。
リクエストは$_REQUESTがそのまま入り、
$responseBuilderにはResponseBuilderクラスオブジェクトが入る。
ResponseBuilderには(実際使うべき)メソッドが1つしかない。
add($key, $value);
のみだ。キーと値を設定できる。
これがレスポンスとして返されるようになっている。
javaScriptのコールバック関数にはまさにこれが渡される。

Javaの場合はもっと堅守に作ってある(?)のでサンプルを見れば分かるだろう。 基本はPHPと同じだ。 つーかJavaの方を参考にPHP作ったんだけどね。

さて、返されたレスポンスは自動的にセットされるのだが、
そのセットの方法を簡単に説明。

まず、キーと同じElement(inputタグとかhiddenとか)を探す。
あれば、そこのvalueにレスポンスをそのまま設定する。
なければ、同じidがないか探す。あれば、そこのinnerHTMLにレスポンスをそのまま設定する。

なので、レスポンスで返す場合は、inputタグとかのvalueに設定できるものもしくはspanやdivなどinnerHTMLを設定できるものに限る必要がある。
その他の設定は自動ではできないので、コールバック関数内で行うべし。


ざっと書いてみたが、極力少ないjavascriptの記述とわかりやすい書き方(formを使うので通常のsubmitとほぼ同じに書ける。)なので、とっつきやすいと思う。
これを拡張せずに(コールバック関数を書かずに)できることってのは少ないかもしれないが、
beanを動的に書き換えることが可能なので2度目、3度目で処理を分けることもできる。
色々な使いかたができるかな。と思ったりする。