Tapestry学习笔记(4)

在Tapestry框架运行时,通过反射机制生成一个继承于我们页面类的子类,根据页面规范或组件规范中声明的属性,向这个反射生成的子类中添加标准的JavaBean属性,这就是属性指定的运作过程。在页面规范中声明的数据称为页面属性;在组件规范中声明的属性成为组件属性。其实,不论页面属性还是组件属性,他们都以完全一样的方式进行声明和使用。将Tapestry属性分为页面属性和组件属性,只不过为了方便称呼。
例如,在登录页面Home,为了拥有一个用户名和密码的输入值载体,我们在页面规范Home.page中声明两个页面属性。
[code]<property name=”username”/>
<property name=”password”/> [/code]
为了在页面类Home.java中能够获取到这两个页面属性,我们需要定义两个对应于页面属性的JavaBean抽象getter方法。
[code]Public abstract string getUsername();//用户名
Public abstract string getPassword();//密码 [/code]
在页面规范或组件规范中声明属性的时候,我们并不需要声明其类型。Tapestry框架根据我们在页面类或组件类中声明的JavaBean抽象的getter/setter方法类型来决定属性的类型。
从反射机制的角度,由于Tapestry框架运行时会生成一个集成于页面类的子类,根据Java的多态性,我们很容易理解,既然子类生成的是标准JavaBean属性,那么当我们在父类(页面类或组件类)中调用JavaBean属性的抽象getter方法,即可以获得子类JavaBean中装载的值。
同样,如果我们需要在页面类中设置属性值,那么可以在页面类中添加对应的JavaBean属性抽象的setter方法。如:
[code]Public abstract void setUsername(String username);//设置用户名
Public abstract voif setPassword(String password);//设置密码
[/code]
现在我们已经理解了页面属性(或组件属性)的概念,因此我们可以通过在页面类中添加JavaBean属性的方式来达到页面属性相同的效果。在Home.java中:
[code]Private string password;
Protected void initialize(){
This.password = null;
}
Public String getPassword(){
Return password;
}
Public void setPassword(String password){
This.password = password;
}[/code]除了标准的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等。我们需要对页面属性(或组件属性)进行自定义的初始化事例如下:
[code]<property name=”username” initial-value =”literal:我爱Tapestry”/>[/code]
如这里对页面属性username的声明所示,我们为该页面属性提供一个初始化值:字符串“我爱Tapestry”。它的作用等同于在页面类中对成员变量username进行以下声明。
[code]Private String username;
Protected void initialize(){
This.username=” 我爱Tapestry”;
}
Public String getUsername(){
Return username;
}
Public void setUsername(String username){
This.username=username;
}[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值