(A15)Tapestry Core:Application State

本文翻译出处 http://tapestry.apache.org/tapestry5/tapestry-core/guide/appstate.html

本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。

chinajavawolf

应用状态
通常有一种情况是 , 你有少量的数据需要跨越多个页面。 也许你会创造一个多页向导 , 或者你也许有一个对象 , 可以追踪使用者的曾经登录标识 .
通常 persistent page data 不是适当的,因为持久化的字段域应用在一个特定页面不被共享给跨越页。
你可以用 Application State Object (an ASO) 应用状态对象代替。
使用一个 ASO 对象,值是被自动存储在页面外的,使用一个默认的存储机制,他被存储在 session .
ASO 对象是在一个字段域上标注 ApplicationState
例如:
java 代码
  1. public class MyPage   
  2. {   
  3.  @ApplicationState  
  4.  private MyState _myState;   
  5.     
  6.  . . .   
  7. }  
任何声明了同一类型字段域的组件或页面,不管名字,只要使用了 ApplicationState 标注的就将共享同样的值。这就么简单。
对于 Tapestry4 用户,一个大的变化是在使用 ASO 对象前你不需要提供任何配置,也不用提供一个逻辑名。 Tapestry5 使用类名来识别 ASO, 因此不需要一个逻辑名。
你第一次访问 ASO 时,他被自动创建,使用 ASO 类的默认构造器(公用的,无参的)
分配值给一个 ASO 字段将存储这个值。分配 null 值给 ASO 字段将删除 ASO (正读的字段随后将强迫一个新的 ASO 实例被创建)。
检查 Creation
可伸缩的 Web 应用不用必须创建服务端 session. 。如果你可以避免产生 session ,尤其是第一次访问你的 web 应用时,你将能控制更大量的用户。因此如果你能够避免创建 ASO,你应该这么做
但是如何去避免产生他呢?仅是检查 ("_myState != null") 也将强迫 ASO 的产物存进 session 内。
创造另一个字段来代替它。
 private boolean _myStateExists;
这个同伴字段被用来看 ASO 是否已经存在。他没有被标注。他通过名称查找( "Exists” 被附加在存储 ASO 字段域名后)。他必须是 boolean 类型并且必须是私有的实例变量。
持久化策略
每个 ASO 依照持久化策略被管理。默认的持久化策略是 ”session” 。在 session 中存储 ASOs Session 必须被创建。
配置 ASOs
通常,如果你需要从默认的持久化策略改变它你将配置一个。当前只有一个构建于策略内,但是更多的在将来就会提供了。
你将配置一个 ASO 使你可以控制它要如何被实例化 . 当它被首次创建或实例化,你可能需要注入一些值给 ASO 。在这第二种情况下 , 你可以提供一个 ApplicationStateCreator 对象,他将被召唤创建 ASO, 这是必需的 . 当你想要声明你的 ASO 时有个技巧是接口要优于类:你需要提供一个创造器类实现这个接口。
在你的应用模块里用 tapestry.ApplicationStateManager 去配制一个 ASO
 
java 代码
  1. public void contributeApplicationStateManager(MappedConfiguration configuration)   
  2.  {   
  3.     ApplicationStateCreator creator = new ApplicationStateCreator()   
  4.     {   
  5.       public MyState create()   
  6.       {   
  7.         return new MyState(new Date());   
  8.       }   
  9.     };   
  10.     
  11.     configuration.add(MyState.classnew ApplicationStateContribution("session", creator));   
  12.  }   
这里,我们有一个 ASO 类型的 MyState ,并且我们提供了一个创造器给他。我们 我们已经创造出一些通用的类型 , 但并非是必不可少的 .
我们的创造器使用预备构造器利用当前的日期时间创造了一个新的 MyState 实例。
最后,我们创造了一个 ApplicationStateContribution 确定策略名和创造器, 并提供这方面的配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值