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

来源:互联网 发布:强制uefi ubuntu 卡住 编辑:程序博客网 时间:2024/05/16 06:16

 

 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”/>
这个组件有两个参数:modelvalueValue属性是和以前的组件一样,都是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.xmltapestry 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
废话不多说了,自己看看效果吧。
原创粉丝点击