-イベント発火

たぶん、ページを描画する直前とかに何かしたいと思うかなーということで。まずJavaのモデルオブジェクトです。リターンがvoidで、PageContext型の引数を一つ持つというのが仕様。

package org.seasar.maya.sample.hello;
import java.util.Date;
import javax.servlet.jsp.PageContext;
public class ActionModel {
    public void handleAction(PageContext context) {
        context.setAttribute("now", new Date(), PageContext.PAGE_SCOPE); 
    }
}

テンプレは以下の通り。

<html xmlns:m="http://www.seasar.org/maya">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
    </head>
    <body>
        <span m:inject="$useBean" m:name="actionModel"
            m:class="org.seasar.maya.sample.hello.ActionModel"></span>
        <span m:inject="$action"
            m:listener="${ actionModel.handleAction }"></span>
        <div class="box">
            <span m:inject="c:out" m:value="${ pageScope.now }">00:00</span>
        </div>
    </body>
</html>

結果は、

Fri Feb 18 20:11:37 JST 2005

伝わるかな?レンダリング中だったら、Actionマジックカスタムタグを記述する場所によって、いつでもイベント発火ができるのです。.mayaに書くときは、

<action id="actionID" listener="${ actionModel.handleAction }"/>

一応standardに入れてあるけど、ニーズなかったら削ってもいいかなと思います。作るのもProcessorとNodeおよびそれらのレゾルバで、小さなクラスを4つつくって、レゾルバ登録を2行書いただけですから。というのも、意外に楽に機能追加できる仕組みになりました。この程度の機能なら、仕様を考える時間も含めて、30分ぐらいで出来ます。