Tapestry Visit and Global
Tapestry3.0では2種類のASO(Application state Object)が用意されていました。
Visit:
セッション毎に作成されるオブジェクト
例えばユーザがログインしてログアウトするまでの、状態を保持する時に使用します
アプリケーション単位で作成されるオブジェクト
アプリケーションが起動して終了するまでの状態を保持する。初期設定値等を保持するのに使用される
Tapestry3では、ページやコンポーネントからの、これらのオブジェクトへのアクセスは、getVisit(), getGlobal()等のメソッドが用意されアクセスする事が可能でした。Tapestry4では、この2つの関数はまだ残っていますが、動作が異なりますので注意が必要です。
Tapestry4では、getVisit(), getGlobal()は使用せずに、自分でApplication State Objectの作成をします。
私の場合は、appVisit, appGlobalの名前で作成し、わざと従来のVisit,Globalと区別して使用しています。
<!-- 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は使いにくいからです。


