ApacheTapestry-ストレージ
すべてのWebアプリケーションには、ユーザーオブジェクト、ユーザー設定などの特定のユーザーデータを保存する方法が必要です。たとえば、ショッピングカートアプリケーションでは、ユーザーが選択したアイテム/製品を、ユーザーが希望するまで一時バケット(カート)に保存する必要があります。製品を購入します。アイテムをデータベースに保存することはできますが、すべてのユーザーが選択したアイテムを購入するわけではないため、コストがかかりすぎます。そのため、アイテムを保存/永続化するための一時的な手配が必要です。Apache Tapestryは、データを永続化する2つの方法を提供します。
- 永続性ページデータ
- セッションストレージ
どちらにも独自の利点と制限があります。次のセクションで確認します。
永続性ページデータ
永続ページデータは、リクエスト間で単一ページにデータを永続化するための単純な概念であり、次のようにも呼ばれます。 Page Level Persistence。それはを使用して行うことができます@Persist 注釈。
@Persist
public int age;
フィールドに@Persistアノテーションが付けられると、フィールドの値はリクエスト間で永続化され、リクエスト中に値が変更された場合は、次回アクセス時に反映されます。Apache Tapestryは、@ Persistの概念を実装するための5種類の戦略を提供します。それらは次のとおりです-
Session Strategy −データはセッションを使用して永続化され、これはデフォルトの戦略です。
Flash Strategy−データはSessionを使用しても保持されますが、非常に短命です。データは、後続の1つのリクエストでのみ利用可能になります。
@Persist(PersistenceConstants.FLASH)
private int age;
Client Strategy − URLクエリ文字列、フォームの非表示フィールドなどのデータは、クライアント側で保持されます。
@Persist(PersistenceConstants.FLASH)
private int age;
Hibernate Entity Strategy−データはHibernateモジュールをエンティティとして使用して永続化されます。エンティティはHibernateに保存され、その参照(Javaクラス名とその主キー)はトークンとして保存されます。HttpSession。エンティティは、HttpSessionで使用可能なトークンを使用して復元されます。
@Persist(HibernatePersistenceConstants.ENTITY)
private Category category;
JPA Entity Strategy−データはJPAモジュールを使用して永続化されます。エンティティのみを保存できます。
@Persist(JpaPersistenceConstants.ENTITY)
private User user;
セッションストレージ
セッションストレージは、複数ページウィザードのデータ、ログインしたユーザーの詳細など、ページ間で利用できる必要があるデータを保存するために使用される高度な概念です。セッションストレージには、複雑なオブジェクトを保存するオプションと単純な値を保存するオプションの2つのオプションがあります。
Session Store Object −複雑なオブジェクトを格納するために使用されます。
Session Attributes −単純な値を格納するために使用されます。
セッションストアオブジェクト(SSO)
SSOは、を使用して作成できます @SessionStore注釈。SSOは、オブジェクトのタイプを使用してオブジェクトを格納します。たとえば、Cart ObjectCartクラス名をトークンとして使用して保存されます。したがって、複雑なオブジェクトはすべて、アプリケーションに1回(ユーザーごとに1つ)格納できます。
public class MySSOPage {
@SessionState
private ShoppingCart cart;
}
SSOは特殊なストアであり、複雑な/特殊なオブジェクトのみを格納するために使用する必要があります。SSOを使用して単純なデータ型を格納することもできますが、Stringのような単純なデータ型を格納すると、アプリケーションに1つの「String」値のみが格納されます。アプリケーションで単一の「文字列」値を使用することは、まったく不可能です。Apache Tapestryがセッション属性を提供するため、単純なデータ型を使用できます。
セッション属性
セッション属性を使用すると、データをタイプではなく名前で保存できます。
public class MyPage {
@SessionAttribute
private String loggedInUsername;
}
デフォルトでは、セッション属性はフィールド名を使用してセッション内のデータを参照します。以下に示すように、アノテーションパラメータによって参照名を変更できます-
public class MyPage {
@SessionAttribute("loggedInUserName")
private String userName;
}
名前をセッション参照として使用する際の主な問題の1つは、複数のクラス/ページで誤って同じ名前を使用する可能性があることです。この場合、保存されているデータが予期せず変更される可能性があります。この問題を修正するには、クラス/ページ名およびパッケージ名と一緒に名前を使用することをお勧めします。com.myapp.pages.register.email、ここで、com.myapp.pagesはパッケージ名、registerはページ/クラス名、最後にemailは変数(保存される)名です。