Tapestry Visit and Global

Tapestry3.0では2種類のASO(Application state Object)が用意されていました。

Visit:

セッション毎に作成されるオブジェクト
例えばユーザがログインしてログアウトするまでの、状態を保持する時に使用します

Global

アプリケーション単位で作成されるオブジェクト
アプリケーションが起動して終了するまでの状態を保持する。初期設定値等を保持するのに使用される

Tapestry3では、ページやコンポーネントからの、これらのオブジェクトへのアクセスは、getVisit(), getGlobal()等のメソッドが用意されアクセスする事が可能でした。Tapestry4では、この2つの関数はまだ残っていますが、動作が異なりますので注意が必要です。

Tapestry4では、getVisit(), getGlobal()は使用せずに、自分でApplication State Objectの作成をします。
私の場合は、appVisit, appGlobalの名前で作成し、わざと従来のVisit,Globalと区別して使用しています。

hivemodule.xml

<!--  Visit & Global --><contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppVisit" scope="session"><create-instance class="jp.co.taosoftware.tagraw.tape.AppVisit" /></state-object></contribution><contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppGlobal" scope="application"><create-instance class="jp.co.taosoftware.tagraw.tape.AppGlobal" /></state-object></contribution>


AppVisitオブジェクト

public class AppVisit implements Serializable{private User user;public User getUser(){ return this.user;}public void setUser(User aUser){ this.user = aUser;}public boolean isLogin(){if(user == null) return false;else return true;}}

AppGlobalオブジェクト

public class AppGlobal implements Serializable{}

ページ

public abstract class AppPage extends BasePage{@InjectState("AppVisit")public abstract AppVisit getAppVisit();public abstract void setAppVisit(AppVisit aVisit);@InjectState("AppGlobal")public abstract AppVisit getAppVisit();public abstract void setAppVisit(AppVisit aVisit);}

上記の組み合わせでAppPageから、getAppVisit(), getAppGlobal()メソッドを通して、ASOへのアクセスが可能になります。
Annotesionを使用しない場合は、*.pageファイルに以下の記述を追加します。

<inject name="appVisit" type="state" object="appVisit"/>

私の場合はGlobalは何も使用していません。基本的にページやコンポーネントからしか、これらのASOへのアクセスは出来ませんので、VisitはともかくGlobalは使いにくいからです。


コメント

このブログの人気の投稿

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

iBatisで動的SQL

情報処理安全確保支援士登録証のカード型が届きました。