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 创建一组单选按钮的代码。用到了两种组件: radiogroup radio-------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; 

}

}
  
接下来作者说了一大推废话,意思就是说当提交注册页面表单的时候, Tapestry set form 表单的值,然后再去寻找有没有方法去处理提交的事件。
还加了一下代码测试:
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 。毕竟代码增加了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值