import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.tapestry.OptionGroupModel;
import org.apache.tapestry.OptionModel;
import org.apache.tapestry.ValueEncoder;
import org.apache.tapestry.internal.OptionModelImpl;
import org.apache.tapestry5.internal.OptionGroupModelImpl;
import org.apache.tapestry.ioc.services.PropertyAccess;
import org.apache.tapestry.ioc.services.PropertyAdapter;
import org.apache.tapestry.util.AbstractSelectModel;
/** Generic selection model for a list of Objects.
* use:
* <pre>@Inject private PropertyAccess _access;</pre>
* in your page to ge the {@link PropertyAccess} service.<br>
* !Notice: you must set the created instance both as model and encoder parameter for the {@link Select} component.*/
public class GenericSelectModel<T> extends AbstractSelectModel implements ValueEncoder<T> {
private PropertyAdapter labelFieldAdapter;
private PropertyAdapter idFieldAdapter;
private Collection<T> list;
public GenericSelectModel(Collection<T> list, Class<T> clazz, String labelField, String idField, PropertyAccess access) {
this.list = list;
if (idField != null)
this.idFieldAdapter = access.getAdapter(clazz).getPropertyAdapter(idField);
if (labelField != null)
this.labelFieldAdapter = access.getAdapter(clazz).getPropertyAdapter(labelField);
}
public void addOptionGroup(String label, boolean disabled, List<T> options) {
List<OptionModel> optionModels = new ArrayList<OptionModel>();
if (labelFieldAdapter == null) {
for (T obj : options) {
optionModels.add(new OptionModelImpl(nvl(obj), obj));
}
} else {
for (T obj : options) {
optionModels.add(new OptionModelImpl(nvl(labelFieldAdapter.get(obj)), obj));
}
}
if (optionGroups == null) {
optionGroups = new ArrayList<OptionGroupModel>();
}
optionGroups.add(new OptionGroupModelImpl(label, disabled, optionModels, new String[0]));
}
public List<OptionGroupModel> getOptionGroups() {
return null;
}
public List<OptionModel> getOptions() {
List<OptionModel> optionModelList = new ArrayList<OptionModel>();
if (labelFieldAdapter == null) {
for (T obj : list) {
optionModelList.add(new OptionModelImpl(nvl(obj)));
}
} else {
for (T obj : list) {
optionModelList.add(new OptionModelImpl(nvl(labelFieldAdapter.get(obj)), obj));
}
}
return optionModelList;
}
// ValueEncoder functions
public String toClient(T obj) {
if (idFieldAdapter == null) {
return obj + "";
} else {
return idFieldAdapter.get(obj) + "";
}
}
public T toValue(String string) {
if (idFieldAdapter == null) {
for (T obj : list) {
if (nvl(obj).equals(string)) return obj;
}
} else {
for (T obj : list) {
if (nvl(idFieldAdapter.get(obj)).equals(string)) return obj;
}
}
return null;
}
private String nvl(Object o) {
if (o == null)
return "";
else
return o.toString();
}
}
分享到:
相关推荐
自定义的邮件组件!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
tapestry4.02中封装ext的GridPanel组件
引用Tapestry网站上的一句话:"Tapestry用对象(objects),方法(methods),属性(PRoperties)替代以往的URLs和查询参数, 重新诠释Web应用开发.Tapestry 3.0即将发布,它有大量的改进和新的特性.你值得拥有!!!!
tapestry5组件说明使用及登陆修改等简单实例
本文介绍Tapestry框架版本5。本文利用Tapestry 5开发一个简单的具有创建/读/更新/删除功能的应用,在创建这个应用的过程中,本文体会到Tapestry...还将了解如何应用Tapestry中内嵌的Ajax功能来创建支持Ajax的组件。
tapestry页面编辑组件,可以实现文本框,单选框,多选框和下拉框等的自动生成,并返回改变后的数据。
Tapestry5和jQuery集成.使用jQuery以极少的兼容问题完全替换Prototype 和 Scriptaculous库 标签:tapestry5
介绍Tapestry组件的使用和功能。内容还行,使用初学者入门。
里面用详细实例说明了tapestry5的使用方法 简单 实用 详细 一看就会 在这里提醒一下大家,这个教程讲的是tapestry5而不是tapestry4,如果需要看tapestry4的话,请看我传的另外一本有关tapestry的教程,英文的那本,...
最新Tapestry 5 電子書
老外的一个ppt介绍Tapestry 5
tapestry部分组件绑定参数的列表!
Tapestry5 英文版入门技术指导!
Tapestry5开发环境搭建(Eclipse),包括服务器搭建。。。
Zubairov合作撰写了一篇文章,详细介绍Apache Tapestry 版本5——一个面向组件web框架。文章向读者展示了创建组件方法,并谈到了Tapestry中的IoC以及Ajax的相关特性 译者 沙晓兰 发布于 2008年7月2日 下午9时30...
tapestry hibernate Spring应用及组件的使用的一个简单完整例子,包含form组件、table组件的一个增删改查。其中数据库创建用户和表在docs里,数据库使用oracle
Tapestry 5开发指南(英文) Tapestry 5开发指南(英文) Tapestry 5开发指南(英文) Tapestry 5开发指南(英文)
tapestry5组件说明使用等简单实例。Apache Tapestry是一个使用Java语言创建web应用的面向组件的开发框架。Tapestry应用建立在根据组件构建的页面的基础上。这个框架能够提供输入验证(input validation)、本地化/...
来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...