Apache Tapisserie - Lagerung
Jede Webanwendung sollte eine Möglichkeit haben, bestimmte Benutzerdaten wie Benutzerobjekte, Benutzereinstellungen usw. zu speichern. In einer Warenkorbanwendung sollten beispielsweise die ausgewählten Artikel / Produkte des Benutzers in einem temporären Eimer (Warenkorb) gespeichert werden, bis der Benutzer dies bevorzugt die Produkte zu kaufen. Wir können die Artikel in einer Datenbank speichern, dies ist jedoch zu teuer, da nicht alle Benutzer die ausgewählten Artikel kaufen werden. Wir brauchen also eine vorübergehende Vereinbarung, um die Gegenstände zu lagern / zu behalten. Apache Tapestry Bietet zwei Möglichkeiten, um die Daten zu speichern:
- Persistenzseitendaten
- Sitzungsspeicher
Beides hat seine eigenen Vor- und Nachteile. Wir werden es in den folgenden Abschnitten überprüfen.
Persistenzseitendaten
Die Persistenzseitendaten sind ein einfaches Konzept zum Speichern von Daten auf einer einzelnen Seite zwischen Anforderungen und werden auch als bezeichnet Page Level Persistence. Dies kann mit dem erfolgen@Persist Anmerkung.
@Persist
public int age;
Sobald ein Feld mit @Persist kommentiert ist, bleibt der Wert des Felds über die Anforderung hinweg erhalten. Wenn der Wert während der Anforderung geändert wird, wird er beim nächsten Zugriff angezeigt. Apache Tapestry bietet fünf Arten von Strategien zur Implementierung des @ Persist-Konzepts. Sie sind wie folgt -
Session Strategy - Die Daten werden mithilfe der Sitzung beibehalten und sind eine Standardstrategie.
Flash Strategy- Die Daten werden auch mit Session beibehalten, sind jedoch sehr kurzlebig. Die Daten werden nur in einer nachfolgenden Anfrage verfügbar sein.
@Persist(PersistenceConstants.FLASH)
private int age;
Client Strategy - Die Daten bleiben auf der Clientseite erhalten, z. B. URL-Abfragezeichenfolge, ausgeblendetes Feld im Formular usw.
@Persist(PersistenceConstants.FLASH)
private int age;
Hibernate Entity Strategy- Die Daten werden mit dem Hibernate-Modul als Entität beibehalten. Die Entität wird im Ruhezustand gespeichert und ihre Referenz (Java-Klassenname und Primärschlüssel) wird als Token in gespeichertHttpSession. Die Entität wird mithilfe des in HttpSession verfügbaren Tokens wiederhergestellt.
@Persist(HibernatePersistenceConstants.ENTITY)
private Category category;
JPA Entity Strategy- Die Daten werden mit einem JPA-Modul beibehalten. Es kann nur Entität speichern.
@Persist(JpaPersistenceConstants.ENTITY)
private User user;
Sitzungsspeicher
Der Sitzungsspeicher ist ein erweitertes Konzept zum Speichern von Daten, die seitenübergreifend verfügbar sein müssen, z. B. Daten im Assistenten für mehrere Seiten, angemeldete Benutzerdetails usw. Der Sitzungsspeicher bietet zwei Optionen: eine zum Speichern komplexer Objekte und eine zum Speichern einfacher Werte
Session Store Object - Zum Speichern komplexer Objekte.
Session Attributes - Dient zum Speichern einfacher Werte.
Session Store Object (SSO)
Ein SSO kann mit erstellt werden @SessionStoreAnmerkung. Das SSO speichert das Objekt unter Verwendung des Objekttyps. Zum Beispiel dieCart Objectwird unter Verwendung eines Cart-Klassennamens als Token gespeichert. So kann jedes komplexe Objekt einmal in einer Anwendung gespeichert werden (eines pro Benutzer).
public class MySSOPage {
@SessionState
private ShoppingCart cart;
}
Ein SSO ist ein Spezialgeschäft und sollte nur zum Speichern komplexer / spezieller Objekte verwendet werden. Einfache Datentypen können auch mit einem SSO gespeichert werden. Durch das Speichern einfacher Datentypen wie String wird jedoch nur ein "String" -Wert in der Anwendung gespeichert. Die Verwendung eines einzelnen "String" -Werts in der Anwendung ist einfach nicht möglich. Sie können einfache Datentypen verwenden, da Apache Tapestry Sitzungsattribute bereitstellt.
Sitzungsattribute
Sitzungsattribute ermöglichen die Speicherung der Daten nach Namen anstelle ihres Typs.
public class MyPage {
@SessionAttribute
private String loggedInUsername;
}
Standardmäßig verwenden Sitzungsattribute den Feldnamen, um auf die Daten in der Sitzung zu verweisen. Wir können den Referenznamen durch Annotationsparameter wie unten gezeigt ändern -
public class MyPage {
@SessionAttribute("loggedInUserName")
private String userName;
}
Eines der Hauptprobleme bei der Verwendung des Namens als Sitzungsreferenz ist, dass wir möglicherweise versehentlich denselben Namen in mehr als einer Klasse / Seite verwenden. In diesem Fall können sich die gespeicherten Daten unerwartet ändern. Um dieses Problem zu beheben, ist es besser, den Namen zusammen mit dem Klassen- / Seitennamen und dem Paketnamen wie zu verwendencom.myapp.pages.register.email, wobei com.myapp.pages der Paketname ist, register der Seiten- / Klassenname ist und E-Mail schließlich der variable (zu speichernde) Name ist.