Tapestry学习十四:关于组件(九)Select组件

 

  web 应用中下拉选择菜单是必不可少的东西。在 Tapestry 中是用 select 组件实现的。而且 select 组件能很好的和 emun 相结合,避免在页面中写死那些选项。
 

我们在注册页面上价格选择框,让用户选择他的国家:

 

按惯例还是先看代码:
 
<tr>
<td>Country:</td>
<td>
<select t:type="select"  t:model="countries" t:value="country">
<option>Country 1</option>
<option>Country 2</option>
</select>
</td>
</tr>
 
可以看到 select 组件是隐藏在 HTML 控件中的,如果你不想那么写可以以:
<t:select t:model=”contris” t:value=”country”/>
这个组件有两个参数: model value Value 属性是和以前的组件一样,都是 class 中的属性。
Model 参数提供显示在下拉列表中的数据。这个参数从 page class 中接受一个实现了 SelectModel 接口的类。提供 SelectModel 类的实现有几种方式,这取决与我们想要多灵活和强大。这里我们只考虑简单的,复杂的会在最后讨论。
首先我们要创建一个 enum 类:
 
package com.packtpub.celebrities.model;
public enum Country
{
GERMANY , UK, USA
}
 
这里只写了几个,你想要以后可以自己添加。看看类中的代码:
 
@Inject
private Messages messages;
public SelectModel getCountries()
{
return new EnumSelectModel(Country.class, messages);
}
@Persist
private Country country;
public Country getCountry()
{
return country;
}
public void setCountry(Country country)
{
this.country = country;
}
 
我们实例化了一个 EnumSelectModel 类,这个类实现了一个 SelectModel 接口, EnumSelectModel 构造器有两个参数,一个是在下拉框中显示的数据,还有一个被我们注入的是有点神秘兮兮的 message 。这个 message 是什么?
 
这个话题和以后要说道的国际化就很接近了。每一个 Tapestry 应用都能有一些资源文件,这些资源文件可以被应用和组件使用,它是一个 .properties 的文件,放在 web-inf 文件夹下。它们是以键值对的方式存在的。
 
当这个 message 被注入到页面,这个对象就从资源文件中提供了很多可用的键值对给页面使用。我们需要提供一个这样的文件给他。
但是这个资源文件的名字可不是随便定义的,它的名字是对应这 web.xml tapestry filter 的名字。
<filter>
<filter-name>app</filter-name>
<filter-class>org.apache.tapestry.TapestryFilter
</filter-class>
</filter>
所以我们要新建一个叫 app.properties 的文件:
Country.Germany=Germany
country.UK=United Kingdom
COUNTRY.USA=United States
废话不多说了,自己看看效果吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值