Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

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
java
languagejava
  @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
languagejava
titleExample: Session Strategy
  @Persist
  private int value;

...

The flash is typically used to store temporary messages that should only be displayed to the user once.

Code Block
languagejava
titleExample: Flash Strategy
  @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
languagejava
titleExample: Client Strategy
  @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
languagejava
title"Hibernate Entity Strategy"
  @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
languagejava
title"Example: JPA Entity Strategy"
  @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
Clustering Issues
Clustering Issues

Code Block
languagejava
titleExample: Entity Session Strategy
  @Persist(HibernatePersistenceConstants.ENTITY)
  private User user;


Code Block
languagejava
title"Example:JAP Session Strategy"
  @Persist(JpaPersistenceConstants.ENTITY)
  private Account account;

...