用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
memoordit的公告
文章分类
存档

原创  Tapestry学习十一:关于组件(六)Radio and RadioGroup 收藏

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> 

<head> 

<title>Celebrity Collector: Registration</title> 

</head> 

<body> 

<h1>Registration</h1> 

<t:form t:id="registrationForm"> 

<table> 

<tr> 

<td><t:label t:for="userName"> 

Label for user name</t:label>:</td> 

<td><input type="text" t:type="textfield" 

t:id="userName" t:value="userName"/></td> 

</tr> 

<tr> 

<td><t:label t:for="password"> 

Label for password</t:label>:</td>

<td><input type="text" t:type="passwordfield" 

t:id="password" t:value="password"/></td> 

</tr> 

<tr> 

<td><t:label t:for="password2"> 

Label for password 2</t:label>:</td> 

<td><input type="text" t:type="passwordfield" t:id="password2" t:label="Repeat password" 

t:value="password2"/></td> 

</tr> 

<tr> 

<td>Gender:</td> 

<td> 

<t:radiogroup t:value="gender"> 

<input type="radio" t:type="radio" 

t:value="literal:M"/> Male 

<input type="radio" t:type="radio" 

t:value="literal:F"/> Female 

</t:radiogroup> 

</td> 

</tr> 

</table> 

<input type="submit" value="Submit"/> 

</t:form> 

<br/> 

<a href="#" t:type="PageLink" t:page="Start"> 

Back to the Start Page</a> 

</body>

</html>
  
除了下面的这些代码其他的都很熟悉了
<t:radiogroup t:value="gender">
<input type="radio" t:type="radio" t:value="literal:M"/>
Male
<input type="radio" t:type="radio" t:value="literal:F"/>
Female
</t:radiogroup>
这是Tapestry创建一组单选按钮的代码。用到了两种组件:radiogroupradio-------radiogroup是和page class交互,告诉它什么值被选中,而radio提供了一组可供选择的值。
Radiogroup中的value参数是和page class中的属性相联系的。在例子中,要确保Registration.java中有gender属性:
 package com.packtpub.celebrities.pages;

public class Registration 

{ 

private String userName; 

private String password; 

private String password2; 

private String gender; 

public String getUserName() 

{ 

return userName; 

} 

public void setUserName(String userName) 

{ 

System.out.println("Setting user name: " + userName); 

this.userName = userName; 

} 

public String getPassword() 

{ 

return password; 

} 

public void setPassword(String password) 

{ 

System.out.println("Setting password: " + password); 

this.password = password; 

} 

public String getPassword2() 

{ 

return password2; 

} 

public void setPassword2(String password2) 

{ 

this.password2 = password2; 

} 

public String getGender() 

{ 

return gender; 

}

public void setGender(String gender) 

{ 

System.out.println("Setting gender: " + gender); 

this.gender = gender; 

}

}
  
接下来作者说了一大推废话,意思就是说当提交注册页面表单的时候,Tapestrysetform表单的值,然后再去寻找有没有方法去处理提交的事件。
还加了一下代码测试:
void onSubmitFromRegistrationForm()
{
System.out.println("The form was submitted!");
}
 
使用枚举为Radio组件提供值
现在执行应用程序,看到页面中的单选框没有默认选中的项,如果想要有默认选中,那么在类中加:
private String gender = "F";
页面可以正常的运行了,但是把radio的项都写死在页面中不是个好的设计,最好是卸载一个枚举类中:
com.packtpub.celebrities.model package:
package com.packtpub.celebrities.model;
public enum Gender
{
MALE, FEMALE
}
 
接下来我们修改所有个gender相关的代码,把String类型替换成Gender
 
private Gender gender;
...
public Gender getGender()
{
return gender;
}
public void setGender(Gender gender)
{
this.gender = gender;
}
 
如果你再想提供一个默认值就要这样写了:
private Gender gender = Gender.FEMALE;
 
我们也需要修改模板,使每一个radio组件都有一个合适的值与他相对应,以前我们是用literal前缀来提供这个值:
t:value="literal:M"
 
Tapestry这意味着,跟在前缀后面的值应该被理解从字面上理解,在这种情况下,是一个字符串。然而,对radio组件来说默认的前缀是prop,这意味在在page class中应该有一个对应的属性包含这个值。现在把radio组件改成:
<input type="radio" t:type="radio" t:value="male"/> Male
<input type="radio" t:type="radio" t:value="female"/> Female
 
下面将在页面上添加两个只读的属性:
public Gender getMale()
{
return Gender.MALE;
}
public Gender getFemale()
{
return Gender.FEMALE;
}
 
不知道这么做有什么好处????作者之说给gender一个任意的值不是很好的设计,大概指的是literal前缀。我觉得不一定非要用enum。毕竟代码增加了。

发表于 @ 2008年07月11日 15:41:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:Tapestry学习十:关于组件(5)Another Use of PageLink Component | 新一篇:Tapestry学习十二:关于组件(七)IF和checkbox组件

  • 发表评论
  • 评论内容:
  •  
Copyright © memoordit
Powered by CSDN Blog