-イベント発火
たぶん、ページを描画する直前とかに何かしたいと思うかなーということで。まず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分ぐらいで出来ます。