快速业务通道

Unmi的Struts2学习笔记(七) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
" label="第一个密码"/>    <s:textfield name="users[1].name" label="第二个用户名"/>    <s:textfield name="users[1].name" label="第二个密码"/>

Unmi的Struts2学习笔记(七)(2)

时间:2011-09-04 Unmi.cc 隔叶黄莺

5. 归纳前面3、4、5 几点,Struts2 的 Action 在设置每一个属性时都会 get 一下相应的元素 getUser() 或 getUsers()。

对于 3,在设置 user.name 和 user.pass 之前都会 getUser() 来获取 user 属性,如果 user 为 null 就构造 User 对象,然后设置相应的值。假如声明的 时候就已构造好 User 对象,如有其他属性如 age=18,并不会被覆盖。

对于 4 和 5,也是在设置每一个属性前都会调用 getUsers() 判断声明的 Map 或 List 是否为 null,是则构造对应的 HashMap或 ArrayList() 对象;接 着根据 Key 或下标去获取相应位置的元素,如果不存在或为 null 则构造之,然 后设置相应属性值。由此可见,若某元素的某个属性未重设值则保留原值,若原 来Map或List 已有多个元素,也只会改变到 Key 或索引所对应元素的某个属性。 对于 List 有可能出现跳空的情况,如页面只有索引不从 0 开始

<s:textfield name="users[1].name" label="第二个用户名"/>

<s:textfield name="users[1].name" label="第二个密码"/>

提交后就会发现,List 属性 users 的第一个元素为 null 了。同时如果尝试 一下,你就会发现这里的 List 不能替代为数组 User[] users。

这种样法,可在 Struts 1 中实现,但要略施些小节,见我的另一篇日志:提 交多行数据到Struts的ActionForm的List属性中,行为表现完全一致,只是换到 Struts 2 中一切都不用自己操心。

6. 看第四点,Action 之所以知道该构造什么类型的元素完全是由泛型告诉它 的。如果不用泛型(比如用的是 JDK1.4),Action 中仅仅声明的是 Map users; 或 List users; Action 该如何处理呢?它也不知道,只能够帮你构造出无类型 的 HashMap 和 ArrayList(),填充不了元素。这就必须在局部类型转换的配置文 件中来指定集合元素的类型。例如 Action 为 LoginAction,就要在 LoginAction-conversion.properties 中声明了,格式如下:

#Element_xxx=复合类型,基中 Element 是固定的,xxx 为属性名

#下面表示为 List 属性 users 的元素为 com.unmi.vo.User 类型

Element_users=com.unmi.vo.User

对于 Map,须分别指定 Key 的类型和 Value 的类型

#Key_xxx=复合类型,基中 Key 是固定的,xxx 为 map 属性名,下面写成 String 都不行的

Key_users=java.lang.String

指定 Map 的 Value 的类型与指定 List 元素类型是一样的

Element_users=com.unmi.vo.User

难怪 Struts 2 要与 1.5 以上 JDK 使用,泛型比配置来得方便。如果硬要 用 1.4 JDK,就只有配置类型了,会多很多 conversion 文件的。在 提交多行数 据到Struts的ActionForm的List属性中中类型的确定由 AutoArrayList() 的构造 参数完成。

Unmi的Struts2学习笔记(七)(3)

时间:2011-09-04 Unmi.cc 隔叶黄莺

7. Set 是无序集合,所以无法像 List 那样用数字下标来访问,幸好 Struts 2 可为其指定索引属性。例如,LoginAction 声明为 Set users; (这里好像用泛 型只能省得了 Element_users 说明,KeyProperty_users 少不了)。则需在 LoginAction-conversion.properties 中写下:

#指定 Set 的元素类型

Element_users=com.unmi.vo.User

#KeyProperty_集合属性名=集合元素的索引属性名,这里为User 的 name 属 性

KeyProperty_users=name

此时提交页面这么写,最好提交前能根

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号