...
Making page data persist across requests to a single page is accomplished with the @Persist annotation. This annotation is applied to private instance fields of components:
Code Block | ||
---|---|---|
| ||
@Persist private int value; |
...
The value for each field is the strategy used to store the field between requests.
Session Strategy
Wiki Markup |
---|
{float:right|background=#eee|padding=0 1em}
*JumpStart Demo:*
[Storing Data in a Page| |
...
https://tapestry-jumpstart. |
...
org/jumpstart/examples/state/storingdatainapage] [Passing Data Between Pages| |
...
https://tapestry-jumpstart. |
...
org/jumpstart/examples/state/passingdatabetweenpages] {float} |
The session strategy stores field changes into the session; the session is created as necessary. Session strategy is the default strategy used unless otherwise overridden.
...
A suitably long session attribute name is used; it incorporates the name of the page, the nested component id, and the name of the field.
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist private int value; |
...
The flash is typically used to store temporary messages that should only be displayed to the user once.
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist(PersistenceConstants.FLASH) private int value; |
...
Use client persistence with care, and store a minimal amount of data. Try to store the identity (that is, primary key) of an object, rather than the object itself.
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist(PersistenceConstants.CLIENT) private int value; |
Hibernate Entity Strategy
Entity persistence is provided by the tapestry-hibernate module (which extends Tapestry with new features).
In Entity persistence, the field should store a Hibernate entity instance.
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist(HibernatePersistenceConstants.ENTITY) private User user; |
...
The value stored in the HttpSession is a token for the entity: its Java class name and primary key. When the field is restored in a later request, the entity is re-instantiated using that data.
...
The tapestry-jpa module uses a similar strategy. However, at the current time it can only store a persisted entity (one that has been saved to the database and has a primary key).
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist(JpaPersistenceConstants.ENTITY) private Account account; |
Persistence Strategy Inheritance
By default the value for the Persist annotation is the empty string. When this is true, then the actual strategy to be used is determined by a search up the component hierarchy.
For each component, the meta-data property tapestry.persistence-strategy
is checked. This can be specified using the @Meta annotation.
If the value is non-blank, then that strategy is used. This allows a component to control the persistence strategy used inside any sub-components (that don't explicitly use a different strategy).
...
Include Page | ||||
---|---|---|---|---|
|
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist(HibernatePersistenceConstants.ENTITY) private User user; |
Code Block | ||||
---|---|---|---|---|
| ||||
@Persist(JpaPersistenceConstants.ENTITY) private Account account; |
...