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は使いにくいからです。
コメントを残す
コメントを投稿するにはログインしてください。