Tapestry学习笔记(4)

Tapestry学习笔记(4)
2007-05-31 15:46

在Tapestry框架运行时,通过反射机制生成一个继承于我们页面类的子类,根据页面规范或组件规范中声明的属性,向这个反射生成的子类中添加标准的JavaBean属性,这就是属性指定的运作过程。在页面规范中声明的数据称为页面属性;在组件规范中声明的属性成为组件属性。其实,不论页面属性还是组件属性,他们都以完全一样的方式进行声明和使用。将Tapestry属性分为页面属性和组件属性,只不过为了方便称呼。
例如,在登录页面Home,为了拥有一个用户名和密码的输入值载体,我们在页面规范Home.page中声明两个页面属性。

代码
  1. <property name=”username”/>   
  2. <property name=”password”/>   

为了在页面类Home.java中能够获取到这两个页面属性,我们需要定义两个对应于页面属性的JavaBean抽象getter方法。
代码
  1. Public abstract string getUsername();//用户名   
  2. Public abstract string getPassword();//密码   

在页面规范或组件规范中声明属性的时候,我们并不需要声明其类型。Tapestry框架根据我们在页面类或组件类中声明的JavaBean抽象的getter/setter方法类型来决定属性的类型。
从反射机制的角度,由于Tapestry框架运行时会生成一个集成于页面类的子类,根据Java的多态性,我们很容易理解,既然子类生成的是标准JavaBean属性,那么当我们在父类(页面类或组件类)中调用JavaBean属性的抽象getter方法,即可以获得子类JavaBean中装载的值。
同样,如果我们需要在页面类中设置属性值,那么可以在页面类中添加对应的JavaBean属性抽象的setter方法。如:
代码
  1. Public abstract void setUsername(String username);//设置用户名   
  2. Public abstract voif setPassword(String password);//设置密码   
  3.    

现在我们已经理解了页面属性(或组件属性)的概念,因此我们可以通过在页面类中添加JavaBean属性的方式来达到页面属性相同的效果。在Home.java中:
代码
  1. Private string password;   
  2. Protected void initialize(){   
  3.        This.password = null;   
  4. }   
  5. Public String getPassword(){   
  6.        Return password;   
  7. }   
  8. Public void setPassword(String password){   
  9.        This.password = password;   
  10. }  
除了标准的JavaBean属性,我们需要注意的是protected void initialize()方法。所有的页面类都继承于org.apache.tapestry.html.BasePage类,而BasePage类继承于AbstractPage类,protected void initialize() 方法是org.apache.tapestry.AbstractPage类中的方法。
实际上,页面属性在运作的时候,Tapestry框架不光为其添加标准的JavaBean属性还在页面表现之前和表现之后,两次对页面属性进行初始化。而protected void initialized() 方法具有同样的初始化作用,在页面表现之前和表现之后,两次对页面类中的成员变量进行初始化。
需要注意的是,org.apache.tapestry.AbstractComponent 类中并没有protected void initialize() 方法,而所有的组件类都继承于AbstractComponent类。因此我们不能用这样方式对组件类中的成员变量进行初始化。
Tapestry框架对页面属性或组件属性的默认初始化值是Java各种类型对象的默认值,如int型为0,String型为NULL等。我们需要对页面属性(或组件属性)进行自定义的初始化事例如下:
代码
  1. <property name=”username” initial-value =”literal:我爱Tapestry”/>  

如这里对页面属性username的声明所示,我们为该页面属性提供一个初始化值:字符串“我爱Tapestry”。它的作用等同于在页面类中对成员变量username进行以下声明。
代码
  1. Private String username;   
  2. Protected void initialize(){   
  3.        This.username=” 我爱Tapestry”;   
  4. }    
  5. Public String getUsername(){   
  6.        Return username;   
  7. }   
  8. Public void setUsername(String username){   
  9.        This.username=username;   
  10. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值