Tapisserie Apache - Rangement

Chaque application Web doit avoir un moyen de stocker certaines données utilisateur telles que l'objet utilisateur, les préférences de l'utilisateur, etc. Par exemple, dans une application de panier, les articles / produits sélectionnés par l'utilisateur doivent être enregistrés dans un seau temporaire (panier) jusqu'à ce que l'utilisateur préfère pour acheter les produits. Nous pouvons enregistrer les articles dans une base de données, mais ce sera trop cher puisque tous les utilisateurs n'achèteront pas les articles sélectionnés. Nous avons donc besoin d'un arrangement temporaire pour stocker / conserver les éléments. Apache Tapestry Fournit deux façons de conserver les données et elles sont -

  • Données de la page de persistance
  • Stockage de session

Les deux ont leurs propres avantages et limites. Nous allons le vérifier dans les sections suivantes.

Données de la page de persistance

Les données de page de persistance sont un concept simple pour conserver les données dans une seule page entre les demandes et il est également appelé comme Page Level Persistence. Cela peut être fait en utilisant le@Persist annotation.

@Persist 
public int age;

Une fois qu'un champ est annoté avec @Persist, la valeur du champ sera conservée à travers la demande et si la valeur est modifiée pendant la demande, elle sera reflétée lors de son prochain accès. Apache Tapestry propose cinq types de stratégies pour mettre en œuvre le concept @Persist. Ils sont les suivants -

  • Session Strategy - Les données sont conservées à l'aide de la session et il s'agit d'une stratégie par défaut.

  • Flash Strategy- Les données sont également conservées à l'aide de Session, mais elles sont de très courte durée. Les données ne seront disponibles que dans une seule demande ultérieure.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Client Strategy - Les données sont conservées côté client, telles que la chaîne de requête URL, le champ masqué dans le formulaire, etc.

@Persist(PersistenceConstants.FLASH) 
private int age;
  • Hibernate Entity Strategy- Les données sont conservées en utilisant le module Hibernate en tant qu'entité. L'entité sera stockée dans Hibernate et sa référence (nom de classe Java et sa clé primaire) sera enregistrée en tant que jeton dansHttpSession. L'entité sera restaurée à l'aide du jeton disponible dans HttpSession.

@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
  • JPA Entity Strategy- Les données sont conservées à l'aide d'un module JPA. Il ne pourra stocker que l'entité.

@Persist(JpaPersistenceConstants.ENTITY) 
private User user;

Stockage de session

Le stockage de session est un concept avancé utilisé pour stocker des données qui doivent être disponibles sur toutes les pages, telles que les données dans l'assistant de plusieurs pages, les détails de l'utilisateur connecté, etc.

  • Session Store Object - Utilisé pour stocker des objets complexes.

  • Session Attributes - Utilisé pour stocker des valeurs simples.

Objet de stockage de session (SSO)

Un SSO peut être créé en utilisant @SessionStoreannotation. Le SSO stockera l'objet en utilisant le type de l'objet. Par exemple, leCart Objectsera stocké en utilisant un nom de classe Cart comme jeton. Ainsi, tout objet complexe peut être stocké une fois dans une application (un par utilisateur).

public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}

Un SSO est un magasin spécialisé et doit être utilisé pour stocker uniquement des objets complexes / spéciaux. Les types de données simples peuvent également être stockés à l'aide d'un SSO, mais le stockage de types de données simples comme String permet de ne stocker qu'une seule valeur «String» dans l'application. L'utilisation d'une seule valeur "String" dans l'application n'est tout simplement pas possible. Vous pouvez utiliser des types de données simples car Apache Tapestry fournit des attributs de session.

Attributs de session

Les attributs de session permettent aux données d'être stockées par nom au lieu de son type.

public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}

Par défaut, les attributs de session utilisent le nom du champ pour faire référence aux données de la session. Nous pouvons changer le nom de référence par paramètre d'annotation comme indiqué ci-dessous -

public class MyPage { 
   @SessionAttribute("loggedInUserName") 
   private String userName; 
}

L'un des principaux problèmes liés à l'utilisation du nom comme référence de session est que nous pouvons accidentellement utiliser le même nom dans plus d'une classe / page. Dans ce cas, les données stockées peuvent être modifiées de manière inattendue. Pour résoudre ce problème, il sera préférable d'utiliser le nom avec le nom de la classe / page et le nom du package commecom.myapp.pages.register.email, où com.myapp.pages est le nom du package, register est le nom de la page / classe et enfin l'email est le nom de la variable (à stocker).