Tapestry教程

Tapestry 存储

每个 Web 应用程序都应该有某种方式来存储某些用户数据,例如用户对象、用户偏好等。例如,在购物车应用程序中,用户选择的商品/产品应保存在临时存储桶(购物车)中,直到用户更喜欢购买产品。我们可以将项目保存在数据库中,但由于所有用户都不会购买所选项目,因此成本太高。所以,我们需要一个临时安排来存储/持久化这些项目。 Apache Tapestry 提供了两种方法来持久化数据,它们是-
持久化页面数据 会话存储
两者都有自己的优点和局限性。我们将在以下部分进行检查。

持久化页面数据

持久化页面数据是一个简单的概念,用于在请求之间将数据持久化在单个页面中,也称为 页面级持久化。可以使用 @Persist 注释来完成。
@Persist 
public int age; 
一旦一个字段被@Persist注解,该字段的值将在整个请求中持久化,如果该值在请求过程中发生变化,下次访问时会反映出来。 Apache Tapestry 提供了五种策略来实现@Persist 概念。它们如下-
会话策略-使用会话持久化数据,这是默认策略。 Flash 策略-数据也使用 Session 持久化,但它的生命周期很短。这些数据将仅在一个后续请求中可用。
@Persist(PersistenceConstants.FLASH) 
private int age;
Client Strategy-数据保存在客户端,例如 URL 查询字符串、表单中的隐藏字段等。
@Persist(PersistenceConstants.FLASH) 
private int age; 
Hibernate Entity Strategy-使用 Hibernate 模块作为实体来持久化数据。该实体将存储在 Hibernate 中,其引用(Java 类名及其主键)将作为令牌保存在 HttpSession 中。将使用 HttpSession 中可用的令牌恢复实体。
@Persist(HibernatePersistenceConstants.ENTITY) 
private Category category;
JPA 实体策略-使用 JPA 模块持久化数据。它只能存储实体。
@Persist(JpaPersistenceConstants.ENTITY) 
private User user; 

会话存储

会话存储是一种高级概念,用于存储需要跨页面可用的数据,例如多页向导中的数据、登录的用户详细信息等。会话存储提供两种选择,一种用于存储复杂对象,另一种用于存储简单的值
Session Store Object-用于存储复杂的对象。 会话属性-用于存储简单的值。

会话存储对象 (SSO)

可以使用 @SessionStore 注释创建 SSO。 SSO 将使用对象的类型存储对象。例如, Cart 对象 将使用 Cart 类名称作为标记进行存储。因此,任何复杂对象都可以在应用程序中存储一次(每个用户一个)。
public class MySSOPage { 
   @SessionState 
   private ShoppingCart cart; 
}
SSO 是一种专门的存储,应该仅用于存储复杂/特殊的对象。也可以使用 SSO 存储简单数据类型,但是存储像 String 这样的简单数据类型使其在应用程序中仅存储一个"String"值。在应用程序中使用单个"String"值是根本不可能的。您可以使用简单的数据类型,因为 Apache Tapestry 提供了会话属性。

会话属性

会话属性使数据能够按名称而不是其类型存储。
public class MyPage { 
   @SessionAttribute  
   private String loggedInUsername; 
}
默认情况下,会话属性使用字段名称来引用会话中的数据。我们可以通过注释参数更改引用名称,如下所示-
public class MyPage { 
   @SessionAttribute("loggedInUserName") 
   private String userName; 
}
使用名称作为会话引用的主要问题之一是我们可能会不小心在多个类/页面中使用相同的名称。在这种情况下,存储的数据可能会意外更改。要解决此问题,最好将名称与类/页面名称和包名称一起使用,例如 com.myapp.pages.register.email,其中 com.myapp.pages 是包名称, register 是页面/类名,最后 email 是变量(要存储)名称。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4