`
xiaotian_ls
  • 浏览: 304344 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Collection和Map支持

    博客分类:
  • JAVA
阅读更多

WebWork支持多种方法来判断集合中的对象类型. 这是通过一个 ObjectTypeDeterminer 完成的. WebWork提供了缺省实现. 下面的JavaDocs解释了对Map和Collection的支持是如何在DefaultObjectTypeDeterminer中完成的:

ObjectTypeDeterminer检查 Class-conversion.properties 文件中包含的用于表示Map和Collection中包含的对象类型的相关内容 . 对于Collection, 如List, 使用格式 Element_xxx 来指定其中的元素类型, 这里xxx是action或其他对象中的集合属性名称. 对于Map, 需要按照格式 Key_xxxElement_xxx 分别指定key和value的类型.

从WebWork 2.1.x开始, 仍然支持Collection_xxx这样的书写格式, 尽管这种格式已经被声明废弃而且最终将被去除.

(摘自snippet:id=javadoc|javadoc=true|url=com.opensymphony.xwork.util.DefaultObjectTypeDeterminer)

除此之外, 也可以实现接口ObjectTypeDeterminer来创建自己的定制ObjectTypeDeterminer. WebWork也包含一个可选的使用Java5范型(generics)技术实现的ObjectTypeDeterminer. 更多信息参见J2SE 5 Support.

使用集合的属性索引集合元素(Indexing a collection by a property of that collection)

也可以向WebWork传递元素的某个给定属性的值来获取集合中的唯一元素(element). 缺省情况下, 这个属性由 Class-conversion.properties中定义的KeyProperty_xxx=yyy决定, 这里的xxx是返回集合的JavaBean类型名称, yyy是我们用于索引集合中元素的属性名称. (the property of the element of the collection is determined in Class-conversion.properties using KeyProperty_xxx=yyy where xxx is the property of the bean 'Class' that returns the collection and yyy is the property of the collection element that we want to index on.) 下面的两个类是一个示例:

MyAction.java
/**
* @return a Collection of Foo objects
*/
public Collection getFooCollection()
{
return foo;
}
Foo.java
/**
* @return a unique identifier
*/
public Long getId()
{
return id;
}

然后将 KeyProperty_fooCollection=id 放在MyAction-conversion.properties文件中. 这样就可以使用 fooCollection(someIdValue) 从集合fooCollection中获取id等于 someIdValue 的Foo对象. 例如, fooCollection(22) 将得到id值为22的Foo对象.

这一点十分有用, 因为这直接将一个集合中的元素与它的唯一标志符联系起来, 而不需要强制使用索引, 从而允许修改一个Bean的集合中的元素而不需要编写额外的代码. 例如, 值为 Phil 的参数 fooCollection(22).name 将集合fooClooection中id属性值为22的Foo对象的name属性设置为"Phil".

Webwork可以使用类型转换自动将参数的类型转换成key属性的类型.

与Map和List元素的属性不同, 如果fooCollection(22)不存在, WebWork不会创建新的对象. 想要做到这一点, 可以使用符号 fooCollection.makeNew[index], 在这里index是一个整数(0, 1等等). 因此, 参数 fooCollection.makeNew[0]=Phil 以及 fooCollection.makeNew[1]=John 将在fooCollection中添加两个新的Foo对象, 一个name属性值为Phil, 另一个为Bar. 注意, 不管用哪种方法, 在使用Set类型时, 必须定义对象的equals方法和hashCode方法来并保证他们不仅仅包含id属性. 这将导致id属性为null的元素可以从Set中删除.

索引的List和Map的高级示例

下面是一个用于List中的模型bean.
该类的KeyProperty是id属性.

MyBean.java
public class MyBean implements Serializable {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "MyBean{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}

下面的action有一个beanList属性, 它被初始化为一个空的ArrayList对象.

MyBeanAction.java
ublic class MyBeanAction implements Action {
private List beanList = new ArrayList();
private Map beanMap = new HashMap();
public List getBeanList() {
return beanList;
}
public void setBeanList(List beanList) {
this.beanList = beanList;
}
public Map getBeanMap() {
return beanMap;
}
public void setBeanMap(Map beanMap) {
this.beanMap = beanMap;
}
public String execute() throws Exception {
return SUCCESS;
}
}

定义在conversion.properties中的内容告诉TypeConverter使用MyBean的实例作为List的元素.

MyBeanAction-conversion.properties
KeyProperty_beanList=id
Element_beanList=MyBean
CreateIfNull_beanList=true

当通过表单提交到Action时, (id)的值被当作beanList中MyBean实例的KeyProperty.
注意()符号! 不要使用[], 那仅能用在Map里!
属性的name的值将根据指定的id设置到对应的MyBean实例中.
无效的id值将不会再加入null值.
这就避免了OutOfMemory异常的产生!

MyBeanAction.jsp
<ww:iterator value="beanList" id="bean">
<ww:textfield name="beanList(%{bean.id}).name" />
</ww:iterator>
分享到:
评论

相关推荐

    Collection、Map、List、Set、Iterator

    ### Collection、Map、List、Set、...以上就是关于 `Collection`、`Map`、`List`、`Set` 和 `Iterator` 的详细解析,这些概念和类是 Java 编程中非常基础且重要的部分,掌握它们有助于更好地理解和使用 Java 集合框架。

    java Collection&Map

    在这个框架中,Collection和Map接口及其实现类扮演着核心角色。 1. **Collection接口**: - Collection是所有单值容器的基接口,包括Set和List接口。 - **Set接口**:不允许重复元素,主要实现有HashSet、TreeSet...

    collection,map的区分

    在Java编程语言中,`Collection`与`Map`是两种非常基础且重要的数据结构,它们各自具有独特的特性和用途。理解这些数据结构之间的区别对于编写高效、可维护的代码至关重要。 #### Collection `Collection`接口是...

    浅谈Java中常用数据结构的实现类 Collection和Map

    `Collection`和`Map`是Java集合框架的核心组成部分,它们提供了丰富的数据结构实现,方便开发者高效地管理对象。 `Collection`接口是最基础的集合接口,它定义了一个包含零个或多个对象的集合。`Collection`接口的...

    Java集合:Collection、List、Set、Map使用详解

    本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...

    Collection 详细案例,集合的详细例子,list例子和详细解析,map详细例子和详细解析,set详细列子和详细解析,

    ArrayList提供了按索引访问元素的快速方式,支持添加、删除和修改元素。在案例中,你可以看到如何创建ArrayList,插入元素,遍历列表,以及如何使用增删改查(CRUD)操作。 Iterator接口用于遍历集合中的元素,无论...

    Java集合排序及java集合类详解(Collection、List、Map、Set)借鉴.pdf

    本文将深入探讨集合框架的各个组成部分,包括Collection、List、Set和Map,以及它们的特点、常用方法和实现原理。 1. 集合框架概述 集合框架是一组接口和类,它们为数据存储提供了统一的接口和实现。这些接口和类...

    collection-type:库CollectionMap和子类型,其中包含检查PHP类型的信息

    CollectionType是一个库,为Collection和Map提供了它们的子类型,这些子类型正在检查PHP的数据集类型。 要求 PHP 5.5.0或更高版本 安装 CollectionType正式仅支持通过Composer进行安装。 有关Composer文档,请参阅 ...

    Collection E、Map K,V接口底层实现类数据结构的区别和联系.pdf

    集合框架中的两大主要接口是Collection和Map,V&gt;。在分析这两个接口及其底层实现类的数据结构的区别和联系之前,首先需要了解Java集合框架的构成和各个接口、类的作用。 Collection接口是单列集合的根接口,它包含了...

    Java集合Collection、List、Set、Map使用详细讲解.doc

    集合框架包括了多种接口和类,如Collection、List、Set、Map等,它们各自有特定的功能和用途。 1. **集合框架概述** - **容器简介**:集合框架就是一组接口和类,它们定义了存储、检索和操作对象的标准方式。这些...

    css-effect-map-collection-master.zip

    本篇文章将深入探讨名为"css-effect-map-collection-master.zip"的资源包,它是一个收集了多种美观CSS效果的集合,对于提升WebUI组件和框架的设计感具有重要意义。 首先,我们来看这个压缩包的名称——"css-effect-...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    - **迭代器**:Collection的迭代器(Iterator)是遍历集合元素的主要方式,它支持next()和hasNext()方法来访问和移除元素。 3. **List** - **概述**:List接口继承自Collection,它是一个有序的容器,元素可以...

    Java集合排序及java集合类详解(Collection、List、Map、Set

    本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 #### 1.1.1 容器简介 在Java中,容器(Containers)是用来存储和管理对象的结构。...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    ### Java集合排序及java集合类详解(Collection、...以上是对Java集合框架中的`Collection`、`List`、`Set`和`Map`的详细介绍,涵盖了它们的基本概念、常用方法、实现原理等方面,希望对理解和使用Java集合有所帮助。

Global site tag (gtag.js) - Google Analytics