`
zhangrong108
  • 浏览: 205862 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Tapestry5如何用select组件选择对象

阅读更多
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();
}
}

分享到:
评论

相关推荐

    tapestry5 自定义组件

    在 Tapestry 5 框架中,自定义组件是扩展其功能的关键方式,它允许开发者根据特定需求创建个性化和可重用的 UI 元素。Tapestry 5 是一个强大的 Java Web 应用程序开发框架,它强调组件化、模块化以及声明式编程模型...

    tapestry页面编辑组件

    3. **多选框(CheckboxGroup和Checkbox)**:CheckboxGroup组件类似于RadioGroup,但它允许用户选择多个选项。Checkbox组件代表组内的每个可选项目。例如: ```xml ``` 这会创建一组多选框,用户可以...

    tapestry4.02中封装ext的GridPanel组件

    在实际应用中,封装GridPanel组件可以提高开发效率,因为它允许开发者用熟悉的Tapestry语法来创建和管理数据网格,同时享受到ExtJS提供的强大功能。这包括但不限于数据分页、排序、过滤、行选择、编辑和自定义列显示...

    Tapestry5最新中文入门实例教程

    Tapestry 5作为Tapestry系列的新版本,继承了前代的优秀特性,并在此基础上进行了多项改进,使其成为构建现代Web应用程序的理想选择。Tapestry的核心优势包括: - **组件驱动的开发模型**:Tapestry 5采用组件化的...

    Tapestry 5 Building Web Applications.pdf

    - **组件模型**:深入探讨 Tapestry 5 中的组件模型,包括如何定义和使用组件。 - **页面生命周期**:了解 Tapestry 5 页面的生命周期及其在处理用户请求中的作用。 ##### 2. **项目设置与配置** - **开发环境搭建...

    Tapestry 5 電子書

    读者将学习如何使用Tapestry的IoC容器来管理对象的生命周期和依赖关系。 对于服务器端的性能优化,书中也会有专门章节讨论,包括请求处理、缓存策略和AOP(面向切面编程)的应用。这些知识有助于开发者在实际项目中...

    tapestry5中文文档

    Apache Tapestry 5 是一个基于Java的Web应用开发框架,其设计目的是为了简化Web应用程序的构建,提供组件化的页面构建、输入验证、本地化、状态管理和URL映射等功能。Tapestry 5 强调易用性,不仅对终端用户友好,...

    tapestry 5 ..........

    - **面向对象的开发**:Tapestry鼓励使用面向对象的方法来构建应用程序,提高了代码的复用性和可维护性。 - **易于扩展**:Tapestry设计上易于扩展新组件,这对于构建复杂的应用程序非常有帮助。 总之,Tapestry 5...

    Tapestry 5开发指南(英文)

    - **表单组件**:Tapestry 5提供了丰富的表单组件,如文本输入、选择框、日期选择等,且与模型绑定紧密。 - **验证**:内置的验证机制可以检查用户输入,确保数据的完整性和一致性。错误消息可以动态显示给用户。 ...

    Tapestry5使用文档

    此外,还介绍了 **弹出层** 的使用方法以及 **T5 组件解析过程**,帮助开发者更好地理解和应用 Tapestry5 的各种特性。通过对以上知识点的掌握,开发者能够更加熟练地使用 Tapestry5 进行 Web 应用程序的开发。

    Tapestry5最新中文教程

    Apache Tapestry 5 是一个基于Java的开源Web应用程序框架,其设计目标是提供一个面向组件的开发环境,简化Web应用的构建。这个框架的核心特点包括输入验证、本地化/国际化、状态管理和URL处理等,旨在提高用户体验和...

    Tapestry5开发文档手册.doc

    总的来说,Tapestry 5 通过其组件化、面向对象的设计,以及丰富的内置功能,提供了高效、灵活的Web开发体验。通过学习和掌握Tapestry,开发者能够创建出更加优雅、易用、安全且适应性强的Web应用程序。

    tapestry5以上的帮助事例,帮助文档与spring衔接文档

    引用Tapestry网站上的一句话:"Tapestry用对象(objects),方法(methods),属性(PRoperties)替代以往的URLs和查询参数, 重新诠释Web应用开发.Tapestry 3.0即将发布,它有大量的改进和新的特性.你值得拥有!!!!

    Tapestry5和jQuery集成tapestry5-jquery.zip

    Tapestry5和jQuery集成.使用jQuery以极少的兼容问题完全替换Prototype 和 Scriptaculous库 标签:tapestry5

    Tapestry简单入门.rar_java Tapestry_tapestry

    本教程将帮助初学者了解Tapestry的基本概念,带你逐步入门并掌握其核心组件的使用。 首先,让我们深入理解Tapestry的核心理念。Tapestry的目标是通过提高开发效率、简化代码结构和增强可维护性来改善Java Web应用的...

    tapestry5.2.6 jar包

    5. **持久层集成**:Tapestry与Hibernate等ORM框架无缝集成,简化了数据库操作,如tapestry-hibernate模块,它提供了对Hibernate的支持。 6. **Spring集成**:通过tapestry-spring模块,Tapestry可以与Spring框架...

    tapestry hibernate Spring应用及组件的使用

    其次,Hibernate是一个流行的Java对象关系映射(ORM)框架,它简化了与数据库的交互,允许开发者用面向对象的方式来操作数据,而无需关注底层SQL语句。在这个例子中,Hibernate被用来创建和管理数据库用户,以及处理...

    Tapestry5 使用教程

    ### Apache Tapestry5 使用教程详解 #### 一、Apache Tapestry 概述 Apache Tapestry 是一款使用 Java 语言创建 Web 应用程序的面向组件的开发框架。它通过组件化的方法来构建网页,提供了丰富的功能,包括输入...

Global site tag (gtag.js) - Google Analytics