• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
鱼要的是海洋,鸟要的是天空,我要的是自由!
平凡的人不平凡的人生
博客园    首页    新随笔    联系   管理    订阅  订阅

页面生命周期---转

因为PRADO大体上实现了一个页面控制器模式,所以理解页面生命周期是掌握PRADO编程的精华。

我们首先描述一下postback的概念。假如提交由包含表单的页面产生,我们称这个表单提交为postback。在客户端上Postback被认为是一个由用户唤起的事件发生了。PRADO会尝试识别在服务器端的哪一个组件负责处理这个postback事件。假如有一个被确定了,例如是一个TButton组件,我们就叫它是postback事件的sender(发起者)。

在页面被请求期间,有几种运行状态。当页面因一个postback而被请求时,例如包含表单的页面中的一个表单提交,它会经历以下生命周期:

  • 页面创建:该页面和它的所有子组件被递归创建。框架基于组件格式文件和模板文件中的配置来设置最初的组件属性值。你可以重写组件的构造函数来做些早期的初始化工作,例如给一些属性设置默认值。但是要注意,在此期间你不应访问其它组件,因为组件间的关系还没有建立。
  • OnInit事件:一个OnInit事件被广播到整个页面层。你可以重写组件中(包括该页面)的OnInit()方法或者随OnInit事件处理器响应这个事件来做些初始化的工作,例如建立数据库连接等。组件间的关系现在被建立起来了。
  • Viewstate装载:装载上一个viewstate到页面中去。该页面恢复自己到上次它显示给用户的状态。我们将在下一章中说明viewstate。
  • OnLoad事件:在此期间,页面已经更新了上次提交前用户见到的状态。一个OnLoad事件被广播到整个页面层。你可以重写组件中(包括该页面)的OnLoad()函数或者随OnLoad事件处理器来响应这个事件。
  • 递交数据装载:有些组件在OnLoad期间创建,这样就有可能在这个期间装入递交数据。
  • 唤起递交数据变更事件:要是一个组件的数据被用户改变了,它有可能会唤起一个事件来标识这样的一个改变。例如:要是用户改变了在文本字段中的值,相应的TTextBox组件会唤起一个OnTextChanged事件。
  • 输入验证:假如postback事件的发起者需要确认,该页面登记的验证器会验证它们关联组件的数据。
  • Postback事件:一个postback事件被事件发起者唤起。例如:要是该postback是由用户在按钮上点击引起的,相应的TButton组件就会唤起postback事件OnClick。你可以随事件处理器来响应这个事件。
  • OnPreRender事件:到了这个阶段,页面已经完成了递交数据装载和postback事件的处理。一个OnPreRender事件被广播到整个页面层。你可以重写在组件中(包含该页面)的OnPreRender()函数,或者随OnPreRender事件处理器来做一些页面生成前的收尾工作。
  • Viewstate保存:该页面层的viewstate被保存在固定的存储中(如表单中的一个隐藏字段、session、数据库等等)
  • 页面生成:递归生成页面和它包含的组件给用户。默认一个组件会按照它在模板文件中的定义来显示它的主体内容。你可以重写TComponent的render()方法来进行定制生成。
  • OnUnload事件:页面和所有它的子组件从内存中被释放。一个OnUnload事件被广播到整个页面层中去。你可以重写在组件中(包括该页面)的OnUnload()函数,或者随OnUnload事件处理器来做一些清理工作,例如断开数据库连接。

当应该页面初次被请求,上述的生命周期是单一的。精确的说,没有viewstate装载、递交数据装载、唤起递交数据更改事件、输入验证和postback事件。

另外,要是一个模块和一个页面一起被请求,框架会在模块被实例化后(在实例化该页面之前发生)直接调用TModule::onLoad()。框架也会在应用程序退出前调用TModule::onUnload()。

下面的图表展示了postback生命周期(谢谢Todd Patrick贡献了这张漂亮的图表)

posted @ 2005-11-25 09:54  伊凡  阅读(571)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3