- 浏览: 961696 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
数组方式,如我们有两个text,name都是user.name,我们就需要添加一个转换器,转换器刻意查看本人的转换器文章。
使用框架自己的转换器ognl来支持
1.如果action定义了一个pojo类型的属性User user,通过user.name方式会自动封装到user中。
2.集合,通过List<User>这样的泛型来确定类型的。如果没有泛型,需要通过一个局部配置来设置,内容是Element_xxxx=复合类型。Element是固定的,xxx是你的属性名。如Element_user=com.model.User,这样就能识别它的类型了。如果是Map,需要设置key和element,如
Key_user=java.lang.String
Element_user=com.model.User
页面中输出,如下
<s:property value="集合属性[索引].集合元素属性名/>
对于set类型,set类型是无序的(无法通过下标访问,和list不同)
KeyProperty_集合属性名=集合元素的索引属性名。如
KeyProperty_users=name指定key后,那么
<s:property value="users('xingxing').name"/>那么就是set中元素的name属性是xingxing的元素。
另附加一个转载原文http://www.360doc.com/content/10/1207/12/573136_75786273.shtml
Array、List、Map等容器类型的参数传递
除了简单的基于JavaBean方式的参数传递支持,Struts2还支持对Array、List、Map等容器类型的数据结构做数据赋值。不过历史一路走来,XWork针对容器类型的数据赋值一直有变化,让我们慢慢解读这些变化,从而也来看看编程思路是如何改变的。
对于action中有一个属性,不如Role role,role里面有一个集合,如Set<Menu> menus = new HashSet<Menu>();
不晓得怎么对role.menus赋值。。。。。。。。。。。。。。。。。。。
1. 2004年,XWork-1.0.X的年代
当时XWork所支持的针对容器的数据赋值还比较土。这方面moxie在论坛上有一篇文章专门来讲述:http://www.iteye.com/topic/8770。
总的来说,那个年代对于容器的数据赋值,需要依赖于XWork的辅助类。我们可以看到,如果你要对List进行赋值,需要新建一个XWorkList的实现类,并把所需要进行数据赋值的Java类传递到XWorkList的构造函数中。而对Map等对象的赋值,也同理可得。
这种数据赋值的方式的优缺点都非常明显。优点在于简单,你不需要额外定义任何其他的内容,而是直接使用XWork的辅助类来实现类型转化。缺点在于扩展性很弱,很明显,针对某一个具体的容器,就需要一个XWork的实现类,List有XWorkList对应,Map有XWorkMap对应。甚至在那个时候,还没有Set的支持,因为没有XWorkSet的实现。所以使用这种方式,在扩展性方面需要遭受严重的考验。
2. 2006年,XWork-2.0.X的年代
也许是XWork团队看到了扩展性上的问题,所以在XWork和Webwork同时升级以后,采用了新的方式来处理容器赋值。而此时,Javaeye上也涌现出了新的文章,Tin同学对新的方式做了详细的表述:http://www.iteye.com/topic/17939。
不过这个新的整合方式似乎并不被大家所看好。
lllyq 写道
我觉得XWorkList, XWorkMap还是很有用的,挺好的设计,其实没有必要deprecated。
moxie 写道
集合支持不向下兼容。XWorkList已经是@deprecated,用它就错,还不如直接删除掉。在webwork2.2中,它需要为集合另外配置一个conversion.properties文件。真不明白,这样有什么优点?
这种新的整合方式,实际上只是解决了针对容器赋值,不需要依赖XWork的辅助类这样的一个问题,不过其付出的代价,却是多了一个配置文件,这也让人非常郁闷。好好的类型转化,平白无故多出了一个同package下的配置文件,这也无形中增加了编程的复杂度。
3. 现在,拥抱了泛型和Annotation的年代 (需要xwork-tiger架包)
实际上,在XWork发展到XWork-2.0.X之后,也开始注重了对泛型和Annotation的支持。所以,容器类型的转化,我们也可以尝试一下使用JDK的新特性来进行,当然这也是目前最为推荐的做法。
下面分别给出使用泛型和Annotation的代码示例:
<form method="post" action="/struts-example/ognl-collection-conversion.action">
<input type="text" name="users[0].name" value="aaa" />
<input type="text" name="users[1].name" value="bbb" />
<input type="text" name="users2[0].name" value="ccc" />
<input type="text" name="users2[1].name" value="ddd" />
<input type="text" name="userMap['user1'].name" value="eee" />
<input type="text" name="userMap['user2'].name" value="fff" />
<input type="text" name="userMap2['user3'].name" value="ggg" />
<input type="text" name="userMap2['user4'].name" value="hhh" />
<input type="submit" value="submit" />
</form>
public class OgnlConversionAction extends ActionSupport {
private static final long serialVersionUID = 4396125455881691845L;
private static final Log logger = LogFactory.getLog(Policy.class);
private List<User> users;
@Element(value = User.class)
private List users2;
private Map<String, User> userMap;
@Element(value = User.class)
private Map userMap2;
/* (non-Javadoc)
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
@Override
public String execute() throws Exception {
// -> aaa
logger.info("users[0].name : " + users.get(0).getName());
// -> bbb
logger.info("users[1].name : " + users.get(1).getName());
// -> ccc
logger.info("users2[0].name : " + ((User)users2.get(0)).getName());
// -> ddd
logger.info("users2[1].name : " + ((User)users2.get(1)).getName());
// -> [user1, user2]
logger.info("userMap.key : " + userMap.keySet());
// -> eee
logger.info("userMap.key = " + "user1" + " : " + "userMap.value(user1's name) = " + userMap.get("user1").getName());
// -> fff
logger.info("userMap.key = " + "user2" + " : " + "userMap.value(user2's name) = " + userMap.get("user2").getName());
// -> [user3, user4]
logger.info("userMap2.key : " + userMap2.keySet());
// -> ggg
logger.info("userMap2.key = " + "user3" + " : " + "userMap.value(user3's name) = " + ((User)userMap2.get("user3")).getName());
// -> hhh
logger.info("userMap2.key = " + "user4" + " : " + "userMap.value(user4's name) = " + ((User)userMap2.get("user4")).getName());
return super.execute();
}
// setters and getters
}
上面的代码中,我们可以看到,如果你使用泛型,那么你无需再使用任何额外的配置文件或者Annotation,XWork会把一切都为你准备好。如果你没有使用泛型,那么你可以使用Annotation来指定你需要进行转化的对象类型。其中,对Map对象使用Annotation时,Element中的value所对应的值,是Map中的value所对应的class。
由此可见,泛型和Annotation,在一定程度上,还是可以简化我们很多工作的。
使用框架自己的转换器ognl来支持
1.如果action定义了一个pojo类型的属性User user,通过user.name方式会自动封装到user中。
2.集合,通过List<User>这样的泛型来确定类型的。如果没有泛型,需要通过一个局部配置来设置,内容是Element_xxxx=复合类型。Element是固定的,xxx是你的属性名。如Element_user=com.model.User,这样就能识别它的类型了。如果是Map,需要设置key和element,如
Key_user=java.lang.String
Element_user=com.model.User
页面中输出,如下
<s:property value="集合属性[索引].集合元素属性名/>
对于set类型,set类型是无序的(无法通过下标访问,和list不同)
KeyProperty_集合属性名=集合元素的索引属性名。如
KeyProperty_users=name指定key后,那么
<s:property value="users('xingxing').name"/>那么就是set中元素的name属性是xingxing的元素。
另附加一个转载原文http://www.360doc.com/content/10/1207/12/573136_75786273.shtml
Array、List、Map等容器类型的参数传递
除了简单的基于JavaBean方式的参数传递支持,Struts2还支持对Array、List、Map等容器类型的数据结构做数据赋值。不过历史一路走来,XWork针对容器类型的数据赋值一直有变化,让我们慢慢解读这些变化,从而也来看看编程思路是如何改变的。
对于action中有一个属性,不如Role role,role里面有一个集合,如Set<Menu> menus = new HashSet<Menu>();
不晓得怎么对role.menus赋值。。。。。。。。。。。。。。。。。。。
1. 2004年,XWork-1.0.X的年代
当时XWork所支持的针对容器的数据赋值还比较土。这方面moxie在论坛上有一篇文章专门来讲述:http://www.iteye.com/topic/8770。
总的来说,那个年代对于容器的数据赋值,需要依赖于XWork的辅助类。我们可以看到,如果你要对List进行赋值,需要新建一个XWorkList的实现类,并把所需要进行数据赋值的Java类传递到XWorkList的构造函数中。而对Map等对象的赋值,也同理可得。
这种数据赋值的方式的优缺点都非常明显。优点在于简单,你不需要额外定义任何其他的内容,而是直接使用XWork的辅助类来实现类型转化。缺点在于扩展性很弱,很明显,针对某一个具体的容器,就需要一个XWork的实现类,List有XWorkList对应,Map有XWorkMap对应。甚至在那个时候,还没有Set的支持,因为没有XWorkSet的实现。所以使用这种方式,在扩展性方面需要遭受严重的考验。
2. 2006年,XWork-2.0.X的年代
也许是XWork团队看到了扩展性上的问题,所以在XWork和Webwork同时升级以后,采用了新的方式来处理容器赋值。而此时,Javaeye上也涌现出了新的文章,Tin同学对新的方式做了详细的表述:http://www.iteye.com/topic/17939。
不过这个新的整合方式似乎并不被大家所看好。
lllyq 写道
我觉得XWorkList, XWorkMap还是很有用的,挺好的设计,其实没有必要deprecated。
moxie 写道
集合支持不向下兼容。XWorkList已经是@deprecated,用它就错,还不如直接删除掉。在webwork2.2中,它需要为集合另外配置一个conversion.properties文件。真不明白,这样有什么优点?
这种新的整合方式,实际上只是解决了针对容器赋值,不需要依赖XWork的辅助类这样的一个问题,不过其付出的代价,却是多了一个配置文件,这也让人非常郁闷。好好的类型转化,平白无故多出了一个同package下的配置文件,这也无形中增加了编程的复杂度。
3. 现在,拥抱了泛型和Annotation的年代 (需要xwork-tiger架包)
实际上,在XWork发展到XWork-2.0.X之后,也开始注重了对泛型和Annotation的支持。所以,容器类型的转化,我们也可以尝试一下使用JDK的新特性来进行,当然这也是目前最为推荐的做法。
下面分别给出使用泛型和Annotation的代码示例:
<form method="post" action="/struts-example/ognl-collection-conversion.action">
<input type="text" name="users[0].name" value="aaa" />
<input type="text" name="users[1].name" value="bbb" />
<input type="text" name="users2[0].name" value="ccc" />
<input type="text" name="users2[1].name" value="ddd" />
<input type="text" name="userMap['user1'].name" value="eee" />
<input type="text" name="userMap['user2'].name" value="fff" />
<input type="text" name="userMap2['user3'].name" value="ggg" />
<input type="text" name="userMap2['user4'].name" value="hhh" />
<input type="submit" value="submit" />
</form>
public class OgnlConversionAction extends ActionSupport {
private static final long serialVersionUID = 4396125455881691845L;
private static final Log logger = LogFactory.getLog(Policy.class);
private List<User> users;
@Element(value = User.class)
private List users2;
private Map<String, User> userMap;
@Element(value = User.class)
private Map userMap2;
/* (non-Javadoc)
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
@Override
public String execute() throws Exception {
// -> aaa
logger.info("users[0].name : " + users.get(0).getName());
// -> bbb
logger.info("users[1].name : " + users.get(1).getName());
// -> ccc
logger.info("users2[0].name : " + ((User)users2.get(0)).getName());
// -> ddd
logger.info("users2[1].name : " + ((User)users2.get(1)).getName());
// -> [user1, user2]
logger.info("userMap.key : " + userMap.keySet());
// -> eee
logger.info("userMap.key = " + "user1" + " : " + "userMap.value(user1's name) = " + userMap.get("user1").getName());
// -> fff
logger.info("userMap.key = " + "user2" + " : " + "userMap.value(user2's name) = " + userMap.get("user2").getName());
// -> [user3, user4]
logger.info("userMap2.key : " + userMap2.keySet());
// -> ggg
logger.info("userMap2.key = " + "user3" + " : " + "userMap.value(user3's name) = " + ((User)userMap2.get("user3")).getName());
// -> hhh
logger.info("userMap2.key = " + "user4" + " : " + "userMap.value(user4's name) = " + ((User)userMap2.get("user4")).getName());
return super.execute();
}
// setters and getters
}
上面的代码中,我们可以看到,如果你使用泛型,那么你无需再使用任何额外的配置文件或者Annotation,XWork会把一切都为你准备好。如果你没有使用泛型,那么你可以使用Annotation来指定你需要进行转化的对象类型。其中,对Map对象使用Annotation时,Element中的value所对应的值,是Map中的value所对应的class。
由此可见,泛型和Annotation,在一定程度上,还是可以简化我们很多工作的。
发表评论
-
jsp 中 自定义Map 调用国际化
2013-01-30 11:10 1174在jsp中,自动以map,如 #{"1": ... -
s:set 定义一个map并从map取出vlaue
2012-12-19 11:30 11471.方法一,先使用set <td><s:s ... -
标签的样式(去除tr等布局元素)
2012-11-15 17:36 1300struts2中theme属性包括xhtml,html,sim ... -
注解验证
2011-04-27 18:28 2134http://www.opensymphony.com/web ... -
时间类型,精度问题(Timestamp,Date)
2011-04-08 16:38 5226经过调试,发现最后转换器会进入com.opensymphony ... -
freemarker
2011-03-27 23:37 14281.freemarker.properties locale= ... -
ognl
2011-03-27 19:03 1248ognl是object graph(图表) navigaton ... -
文件上传,下载
2011-03-27 13:32 1361关于和文件上传的配置,查看webwork.properties ... -
异常处理
2011-03-26 17:48 1067在默认配置中 <interceptor-stack na ... -
action配置
2011-03-26 17:26 1197普通配置不说明 动态方法调用: 如我们使用同一个表单,当用户 ... -
访问servlet api
2011-03-26 16:44 1085首先获取ActionContext ActionContext ... -
处理结果(result)和默认action
2011-03-26 16:39 1491默认action,在package元素 ... -
动态方法调用
2011-03-22 23:53 1043struts.enable.DynamicMethodInvo ... -
转换器的错误处理
2011-03-22 22:28 1171conversionError拦截器。如果有错误,回到了inp ... -
类转换器
2011-03-22 21:40 968如我们通过在action定义user,然后user.name, ... -
国际化
2011-03-22 21:27 1293保存一个文件到classpath下面,如message.pro ... -
验证框架
2011-03-22 21:21 1144重写validate方法,页面中使用了ww:form标签,已经 ... -
webwork.properties配置文件的属性
2011-03-16 16:44 13491.webwork.configuration=com.ope ... -
主要配置文件
2011-03-16 15:32 1184文件可选位置(相对于webapp)用途web.xml否/WEB ... -
webwork的过滤器
2011-03-15 10:40 1903在webwork的架构中,标准过滤器推荐从ActionCont ...
相关推荐
常见的集合映射类型有 Set、List、Array、Map 和 Bag 等,每种类型都有其特点和应用场景。 Set 集合映射 Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不...
Java 中 List、Array、Map、Set 等集合相互转换 在 Java 中,集合类型的转换是非常常见的操作,例如将 List 转换为 Array、将 Array 转换为 List、将 Map 转换为 List 等等。今天,我们将详细介绍 Java 中 List、...
在处理JSON时,我们有时需要将JSON字符串转换为Java中的各种数据类型,如List、Array、Map和自定义对象。本文将详细介绍如何进行这些转换,并提供一个封装好的转换方法和示例。 1. **String to List** JSON字符串...
根据给定的信息,我们可以从以下几个方面来探讨与Array、Map相关的Scala知识点: ### 1. 元组(Tuple) 在Scala中,元组允许我们组合不同类型的元素到一个单一的复合值中。元组通常用来表示固定大小的有序集合。 ...
本主题主要探讨的是如何使用Gson库处理JSON数据与Java中的Bean、Array、List、Map以及简单类型的相互转换。 首先,我们来看JSON与Java Bean之间的转换。Java Bean是一种具有特定属性和方法的对象,它们通常用来封装...
三种方法将Object-List-Map-Array 转成json 数据 并抽取了工具类,可以很方便的设置包含哪些字段,去掉哪些字段; JSONArray/JSONObject fastjson jackson 这三个框架
`list`会绑定到配置文件中的`myApp.list`,`map`会绑定到`myApp.map`,`array`会绑定到`myApp.array`,而`bean`则会绑定到一个`MyBean`类型的对象,其属性分别对应`myApp.bean.name`,`myApp.bean.property1`和`...
测试报告与总结\list,set,map,数组间的相互转换.rar测试报告与总结\list,set,map,数组间的相互转换.rar测试报告与总结\list,set,map,数组间的相互转换.rar测试报告与总结\list,set,map,数组间的相互转换.rar
在MyBatis中,处理集合参数如list、array以及map是非常常见的操作。这些参数通常用于构建动态SQL,特别是当需要在`IN`语句中使用多个值时。下面将详细解释如何在MyBatis中使用这些参数类型。 1. **List参数**: 当...
在做web开发的时候总会用到jquery 的ajax 技术,然而通过ajax 技术从服务端获取的数据大多是json 格式的数据,所以将不同类型的数据转成json 格式是件很常见的技术,总结一下两种方法!
对于List数据类型,DWR能够将服务器端的ArrayList或LinkedList等转换为JavaScript的Array。在DWR配置文件中,你需要声明允许访问的Java类,例如: ```xml ``` 在这个例子中,`MyClass`的`getListOfObjects`...
在深入讲解之前,我们需要理解Java集合框架的基础,它包括Set、List和Map等接口,以及它们的实现类,如ArrayList、LinkedList和HashMap等。 List接口是Collection接口的子接口,它代表了一个有序的集合,允许有重复...
1、List集合:ArrayList、LinkedList、Vector等 2、Vector是List接口下线程安全的集合 3、List是有序的 4、Array
list.copyToArray(array, 1, 2) // array 结果为 Array(0, 1, 2, 0, 0) ``` #### 10. `def distinct: List[A]` 此方法返回一个只包含列表中不同元素的新列表。 **示例代码:** ```scala val list = List(1, 2, 2, 3...
在Java编程中,数据结构是程序设计的基础,List和Map是两种非常常用的数据结构。本文将详细介绍Java中初始化List和Map的几种常见方法,并对比它们的优缺点。 首先,我们来看传统的初始化方式: ```java // 初始化...
### Scala的Map相关方法整合 在Scala编程语言中,`Map`是一种常用的数据结构,用于存储键值对。本文将详细介绍Scala中Map的各种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def++(xs:Map[(A,B)]...
var mapJson = JSON.stringify(Array.from(myMap.entries())); // mapJson 将会是 '[[\"key1\",\"value1\"],[\"key2\",\"value2\"]]' ``` 然后在Ajax请求中: ```javascript $.ajax({ url: 'your_server_...
Java 集合类 List-Set-Map 的区别和联系 Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的...
JavaScript中的Array.map()方法是一种非常实用的工具,用于在不改变原始数组的情况下,根据提供的回调函数处理数组中的每个元素并创建一个新的数组。由于它不会直接修改原有数组,因此在处理数据时尤其适合需要保持...
在 JavaScript 中,`Array.prototype.map` 方法的用法类似: ```javascript const numbers = [1, 2, 3, 4, 5]; const squaredNumbers = numbers.map((x) => x * x); console.log(squaredNumbers); // 输出:[1, 4, ...