转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
PRADO 2.0.1 快速入门教程 -- 第二章.使用PRADO编程         ★★★★

PRADO 2.0.1 快速入门教程 -- 第二章.使用PRADO编程

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1603 更新时间:2009/4/23 10:40:09
认为是由用户在客户端触发的一个事件。PRADO会区分出把postback事件交给哪一个服务器端的组件来响应。如果找到了这个组件,比如是一个TButton ,那么我们就把这个TButton 组件称为事件的发送者(sender)。

页面在被请求调用的时候会经过几个状态。当一个页面是由于它发生了一个postback而被调用的时候,这个页面会经历以下的生命周期:

  • 页面的创建:页面和它所有子组件是被递归创建的。框架根据各个组件的规格文件和模板文件的配置来初始化组件的属性。你一个可以重载页面的构造函数来做一些其他的初始化工作,比如给一些属性赋一些缺省值。但是需要注意的是,在这一步的时候,是不能够访问其他组件,因为组件之间的关系这时候还没有被建立。
  • OnInit 事件: OnInit 事件会被广播给整个页面的组件树(也就是说所有的组件都会被触发OnInit事件)。可以重载页面的onInit() 方法或者给OnInit事件指定一个处理方法来做一些初始化的工作,比如建立数据库连接等等。这时候组件和组件的关系已经被建立了。
  • 导入显示状态(Viewstate):将先前的显示状态导入到页面中。页面自己会将上次显示给用户看的状态保存起来。关于显示状态,下一章会有更详细的解释。
  • 导入提交的数据:页面中的一些组件的属性会根据用户提交的数据而更新。比如,TTextBox 组件的Text 属性会被用户在此组件的文本输入框中输入的文本而更新。
  • OnLoad 事件:在这个阶段,页面会设置为提交前用户看到的状态。OnLoad 事件也会被广播给整个页面的组件树。同样也可以重载onLoad() 方法或者给OnLoad 事件指定一个处理函数。
  • 导入提交的数据:一些在OnLoad 步骤创建的组件在这时候有机会导入提交的数据。
  • 产生提交数据变化事件。如果一个组件的数据被用户改变了,那么就会机会产生一个事件来指明这个变化。比如用户改变了一个TTextBox 组件的文本输入框的值,那么这个TTextBox 组件就会触发一个OnTextChanged 事件。开发者能够为这个事件指定处理方法。
  • 输入验证:如果事件的提交者需要验证,这时候页面注册的验证组件会来对应的数据。
  • Postback事件:postback事件通过事件的发送者被触发。比如,用户点击了一个按钮引起了一次postback,那么这个按钮对应的TButton 组件就触发一个事件OnClick。你可以指定这个事件的处理函数来响应这个事件。
  • OnPreRender 事件:在这一步,页面已经完成了被提交的数据的导入和postback事件的处理。OnPreRender 事件会被广播给整个页面的组件树 。在页面被绘制之前,你可以重载onPreRender() 函数或者给OnPreRender 事件指定一个事件处理函数。
  • 保存显示状态:整个页面的组件树的显示状态被保存在一个固定的存储空间(比如表单的隐藏字段,session,或者数据库中)。
  • 页面显示:通过递归的方式页面类来显示这个页面,页面中的组件会自己显示自己(意思是说每一个组件都会负责显示它自己)。通常情况下,组件会在对应所在模板的位置上来显示自己。你也可以重载TComponent 的render() 方法来自己控制组件的显示。
  • OnUnload 事件:页面和它所有的子组件从内存中被释放。同样,这个事件也会被广播给整个页面的组件树。你可以通过重载onUnload() 函数或者给OnUnload 事件指定一个处理函数来完成一些清除工作,比如断开数据库的连接等等。

当页面是第一次被请求的时候,上述的生命周期会简单一些。具体来说,导入显示状态,导入提交的数据,产生提交数据变化事件,输入验证和postback事件这几个状态是没有的。

另外,如果一个模块和一个页面同时被请求,PRADO框架将在模块被实例化以后调用TModule::onLoad()(即页面在被实例化之前)。同样的,PRADO框架在应用程序结束之前将调用TModule::onUnload()。

以下图片显示了页面是由于发生了一个postback而被调用的时候的生命周期(感谢Todd Patrick提供这张漂亮的照片)

Image:Lifecycles.gif

应用程序的配置

每一个PRADO应用都应该有一个XML格式的配置文件。在"hello world"这个例子中,这个文件的文件名为 application.spec。

如下所示,我们以PRADO blog中的应用配置文件的格式为范例,

<?xml version="1.0" encoding="UTF-8"?>

 ID="blog" state="debug">
 
  default="Blog:ViewAllPage" format="get" />
 
  class="BlogUser" />
 
  enabled="true" />
 
  enabled="true" />
 
 
 
 
             specify pages responsible for different errors.
       
             specify the page if the error is not recognized.
   -->
    error="SiteOff" page="ErrorPage" />
    error="PageNotFound" page="ErrorPage" />
    error="Unauthorized" page="ErrorPage" />
    error="Forbidden" page="ErrorPage" />
    error="InternalError" page="ErrorPage" />
    page="ErrorPage" />
 
 -->
 
  name="BlogApp" path="." />
 
  namespace="System.Web.UI.WebControls" />
    namespace="System.Security" />
    namespace="BlogApp.global" />
 
  name="DSN">sqlite://blog%2Fblog.db ID="User" class="DataModule">
    namespace="BlogApp.UserModule" />
    page="EditPage" />
    name="AllowNewAccount">true ID="Blog" class="DataModule">
    namespace="BlogApp.BlogModule" />
    page="EditPage" />
    page="NewPage" />
    name="AllowAllDelete">true上面的应用配置文件中,大多数的标签元素在已经在注释中给出说明。 

应用程序包含状态属性,on,off或debug。该状态将决定错误信息是如何显示的。应用程序的ID属性主要用于给指定的Session变量名增加前缀(以防止多个应用程序互相干扰)。

alias 元素定义了文件路径的别名,路径可以是绝对路径或相对路径。

using 元素定义了要增加到 PHP搜索路径 include_path 变量中的命名空间。命名空间是用"."号连接的。第一段是路径的别名,之后是子目录。比如System.Web.UI 代表了框架所在目录下的Web/UI/子目录。框架的目录的别名已经被定义成System 。在编程的时候,也可以调用using() 函数来增加一个命名空间。

secured 标签知名了页面是否需要验证/授权,page 属性指名的是页面的名称或者是页面名称的匹配表达式。如果一个页面被标明是的,那么说明这个页面需要用户验证的。另外如果role 属性不是空的,那么要求用户是属于指定的角色的。

parameter 元素定义了用户参数。可以通过设置parameter 元素的file 属性来导入一个参数文件。该参数文件可以是相对路径或决定路径,参数文件的格式如下,其中注释与应用配置文件类同,

<?xml version="1.0" encoding="UTF-8"?>
 name="...">... name="...">... file="...">...

Module元素定义了应用授权的模块。一个模块可以使用自己的命名空间,定义用户参数的模块访问级别,并指定模块内页面是否授权。每一个模块拥有一个区分其他有效模块的唯一ID。对于模块及其页面的有效的命名空间可以使用全局的(模块外部定义)和使用模块内部定义的。模块类和页面必须是可以通过命名空间定位的。

URL地址格式

PRADO中使用的URL请求格式取决于应用配置中Request的处理定义,默认情况下,使用TRequest识别以下Url格式,

/examples/phonebook.php?page=AddEntryPage

这段代码将会请求 AddEntryPage 页面。如果没有指定page 变量,那么就会调用应用配置中的缺省页面。

如果使用了模块,格式有一些不同,如下在页面类型中加入了模块的ID做为前缀,

/examples/blog.php?page=User:NewPage

如果Web服务器支持改写URL,TRequest同样支持URL格式为路径格式,如下:

/examples/blog.php/page/User:NewPage

详细的实现说明,可参照TRequest文档。

你也可以使用 TApplication::constructUrl() 方法来请求一个页面。

定义新组件

可以通过两种方法来定义新的组件类:继承和组合。

继承是面向对象的设计概念。派生类定义它的父类的一些内容,还可以提供一些其他的功能。在PRADO框架中,组件的属性和事件都是可以继承的。派生类也可以提供更多的属性和事件。所有的组件类都应该从TComponent 或者它的派生类继承。

所有父组件的属性和事件会被派生组件类继承。

组合是用于基于组件的框架的。在PRADO中,主要对控件使用。一个新的控件类可以被定义为几个其他几个控件的组合。新的类负责协调这些控件之间的通信,并代表它们和外界通信。比如可以定义一个LabeledTextBox 控件类(继承TControl ),它由TLabel 一个控件和一个TLabel 控件组成。新的类负责配置这两个组成控件的属性和方法。

一般的约定(并不强求),控件的ID和属性的首字母应该大写,比如HomePage, NavigateUrl, LogoPict;事件以On开头,比如OnClick 。ID和属性的名字命名和变量命名一样,必须是以字母开头的,仅包括字母数字和下划线的字符串。

要定义一个新的组件通常需要写一个组件类文件,一个规格文件和一个模板文件。有些时候后面两个文件可以不要的。

定义属性

组件的属性在组件类的规格文件中定义,规格文件的语法如下:

<?xml version="1.0" encoding="UTF-8"?>
 name="property name"
             get="getter method"
             set="setter method"
             type="property type"
             default="default value" />
   ......

在这里,name 用来唯一标识属性;get 定义了一个类方法来读取属性,set 定义了一个类方法来写属性,type 定义了属性的类型(string, integer, float, boolean, array 和object),default 标识了属性的缺省值。其中name 属性是必须的。getter方法的语法如下:

function getterMethod

上一页  [1] [2] [3]  下一页


[Sql Server]Sql精妙语句--各种求值函数  [网页制作]网页表格之---多个表格纵向排列
[网页制作]JavaScript另类用法--读取和写入cookie  [网页制作]号称非常安全的上网工具---360安全浏览器介绍
[办公软件]信息技术教学篇---Word工具栏的显示、隐藏及四种菜…  [操作系统]开始菜单---运行命令大总结
[操作系统]网络转载---64位操作系统与32位的区别  [操作系统]ldap:///(没有响应)Windows无法访问指定设备、路径…
[网络技术]安全篇---交换机设置方法介绍  [聊天工具]Real10 & Xpdf installation on Linux Box
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台