struts中集合类型的转换
在struts中支持的集合类型有list、map和set,利用这三种集合类型可以保存表单提交的数据,尤其是多个相同类型的数据,如在客户端将一个含有表格的表单提交到服务器并保存到数据库中。
图1
如图1.1所示,每一行都是一个学生对象,将这样一组数据提交到服务器并保存到数据库中时,服务器端就可以使用集合对象接受客户端提交的数据了。
下面以上图中的表单为例,开始介绍这三种不同集合的类型转换:
1、list集合转换步骤
(1) 创建学生对象Student,包含name和age两个属性,并提供相应的get,set方法。
(2) 创建action的实现类Action,在该action中创建一个List集合,并提供对应的get,set方法,其泛型为Student,但是这里要取消泛型。
在和action相同的路径下创建properties属性文件,属性文件的命名规则是:Action类名-conversion.properties
(3) 属性文件中添加制定元素的集合类型
格式为:Element_***=复合类型,其中***表示action中集合属性的属性名,复合类型是集合元素类型的完全属性限定名,即集合泛型的属性名,一般为包名.类名。
(4) 创建视图JSP页面,在jsp中设置表单元素的name属性值时要用
name=” list[0].age”、name=” list[0].name”这种格式,而不是一般的表单name=”name”.
(5)在action的访问方法中进行数据库操作,交获取的值添加到数据库中,这里可以使用hibernate来实现。
(6)在action.xml文件中配置相关的访问设置,然后访问jsp即可。
关键代码如下:
(1) action中创建集合对象,访问函数和数据库操作
图2
图3
(2) 属性文件中的设置:
图4
(3)JSP提交页面中name属性的设置。
图5
2、map集合转化步骤:
(1)创建学生对象Student,包含name和age两个属性,并提供相应的get,set方法。
(2)创建action的实现类Action,在该action中创建一个map集合,并提供对应的get,set方法,其泛型为Student,不取消泛型,在和action相同的路径下创建properties属性文件,属性文件的命名规则是:Action类名-conversion.properties
(3)属性文件中添加制定元素的集合类型
格式为:Key_***=复合类型,其中***表示action中集合属性的属性名,复合类型是集合元素类型的完全属性限定名,即集合泛型的属性名,一般为包名.类名。
(4)创建视图JSP页面,在jsp中设置表单元素的name属性值时要用
name=”map[‘a’].name”、name=”map[‘a’].age”这种格式,而不是一般的表单name=”name”.这里的’a’值的是这一行数据的键,一般用字符串类型。
(5)在action的访问方法中进行数据库操作,交获取的值添加到数据库中,这里可以使用hibernate来实现。
(6)在action.xml文件中配置相关的访问设置,然后访问jsp即可。
核心代码如下:
(1) action中创建集合对象,获取提交的数据并添加到数据库中
图6
图7
(2) 属性文件设置;
图8
(3) jsp页面表单提交name属性设置
图9
3、set集合类型转换步骤:
步骤与list和 map的转换步骤是一样的,下面是不同之处的
(1) 属性文件的设置不同
图10
第一行表示:set集合通过关键字name来索引,因为set是一个无序可重复的集合,只能用过关键字来获取、添加、查找等操作。
第二行表示:action中的集合属性名以及集合元素的类型,即对象的全路径。
第三行表示:当没有实例化集合属性对象时,自动实例化。因为set集合中要求实例化集合元素的属性。
(2) 提交页面表单name属性的设置不同
图11
makeNew[]是规定的写法,一般name都写成集合属性名.makeNew[].集合元素属性对象名,如:stuset.makeNew[2].name
主要就是以上两点区别,代码也基本相同,只要对list中的部分代码稍加改动即可。
总之,以上三种集合类型的转化原理,就是将客户端提交的数据存储在集合中,然后批量添加到数据库中。
备注:这是我在CSDN上发的第一篇博客,我只是想用这样一种方式来记录学习过程,希望以后也能坚持分享自己的学习心得,用这种方式来督促自己培养谨慎、认真的学习态度,同时看到我博客的人,如果觉得哪里不对,希望能提出来让我改正,我会虚心学习的。