Apache Tapestry - Archiviazione
Ogni applicazione web dovrebbe avere un modo per memorizzare determinati dati utente come oggetto utente, preferenze utente, ecc. per acquistare i prodotti. Possiamo salvare gli articoli in un database, ma sarà troppo costoso poiché tutti gli utenti non acquisteranno gli articoli selezionati. Quindi, abbiamo bisogno di una disposizione temporanea per archiviare / persistere gli elementi. Apache Tapestry Fornisce due modi per rendere persistenti i dati e sono:
- Dati della pagina di persistenza
- Archiviazione della sessione
Entrambi hanno i suoi vantaggi e limiti. Lo controlleremo nelle sezioni seguenti.
Dati della pagina di persistenza
Persistence Page Data è un concetto semplice per rendere persistenti i dati in una singola pagina tra le richieste ed è anche chiamato come Page Level Persistence. Può essere fatto usando il@Persist annotazione.
@Persist
public int age;
Una volta che un campo è stato annotato con @Persist, il valore del campo verrà mantenuto per tutta la richiesta e se il valore viene modificato durante la richiesta, verrà riflesso al successivo accesso. Apache Tapestry fornisce cinque tipi di strategie per implementare il concetto @Persist. Sono i seguenti:
Session Strategy - I dati vengono conservati utilizzando la sessione ed è una strategia predefinita.
Flash Strategy- I dati vengono conservati anche utilizzando Session, ma è di durata molto breve. I dati saranno disponibili in una sola successiva richiesta.
@Persist(PersistenceConstants.FLASH)
private int age;
Client Strategy - I dati vengono mantenuti sul lato client come stringa di query URL, campo nascosto nel modulo, ecc.
@Persist(PersistenceConstants.FLASH)
private int age;
Hibernate Entity Strategy- I dati vengono conservati utilizzando il modulo Hibernate come Entity. L'entità verrà archiviata in Hibernate e il suo riferimento (nome della classe Java e la sua chiave primaria) verrà salvato come token inHttpSession. L'entità verrà ripristinata utilizzando il token disponibile in HttpSession.
@Persist(HibernatePersistenceConstants.ENTITY)
private Category category;
JPA Entity Strategy- I dati vengono conservati utilizzando un modulo JPA. Sarà in grado di archiviare solo Entity.
@Persist(JpaPersistenceConstants.ENTITY)
private User user;
Archiviazione della sessione
L'archiviazione della sessione è un concetto avanzato utilizzato per archiviare i dati che devono essere disponibili tra le pagine come i dati nella procedura guidata di più pagine, i dettagli dell'utente connesso, ecc. L'archiviazione della sessione fornisce due opzioni, una per memorizzare oggetti complessi e un'altra per memorizzare valori semplici
Session Store Object - Utilizzato per memorizzare oggetti complessi.
Session Attributes - Utilizzato per memorizzare valori semplici.
Oggetto Session Store (SSO)
È possibile creare un SSO utilizzando @SessionStoreannotazione. L'SSO memorizzerà l'oggetto utilizzando il tipo di oggetto. Ad esempio, il fileCart Objectverrà archiviato utilizzando un nome di classe Carrello come token. Quindi, qualsiasi oggetto complesso può essere memorizzato una volta in un'applicazione (uno per utente).
public class MySSOPage {
@SessionState
private ShoppingCart cart;
}
Un SSO è un negozio specializzato e dovrebbe essere utilizzato per archiviare solo oggetti complessi / speciali. I tipi di dati semplici possono anche essere archiviati utilizzando un SSO, ma la memorizzazione di tipi di dati semplici come String fa sì che memorizzi solo un valore "String" nell'applicazione. L'utilizzo di un singolo valore "String" nell'applicazione semplicemente non è possibile. Puoi utilizzare tipi di dati semplici poiché Apache Tapestry fornisce gli attributi di sessione.
Attributi di sessione
Gli attributi di sessione consentono di memorizzare i dati per nome anziché per tipo.
public class MyPage {
@SessionAttribute
private String loggedInUsername;
}
Per impostazione predefinita, Attributi di sessione utilizza il nome del campo per fare riferimento ai dati nella sessione. Possiamo cambiare il nome di riferimento tramite il parametro di annotazione come mostrato di seguito -
public class MyPage {
@SessionAttribute("loggedInUserName")
private String userName;
}
Uno dei problemi principali nell'utilizzo del nome come riferimento di sessione è che potremmo accidentalmente utilizzare lo stesso nome in più di una classe / pagina. In questo caso, i dati memorizzati potrebbero essere modificati in modo imprevisto. Per risolvere questo problema, sarà meglio usare il nome insieme al nome della classe / pagina e al nome del pacchetto comecom.myapp.pages.register.email, dove com.myapp.pages è il nome del pacchetto, register è il nome della pagina / classe e infine l'email è il nome variabile (da memorizzare).