struts2 OGNL实例化数组的问题.

原创 2007年10月15日 23:17:00

我在Action中使用了:

private SingerDto[] singerDtos;

 定义了getter和setter方法:

public void setSingerDtos(SingerDto[] singerDtos) {
  
this.singerDtos = singerDtos;
 }
    
 
public  SingerDto[]  getSingerDtos() {
  
return singerDtos;
 }

我在页面表单中使用:

歌手姓名:<input type="text" name="singerDtos[0].name"><br>
<select name="singerDtos[0].region">
           
<option value="china" selected>华人歌手</option>
            
<option value="korea">韩国歌手</option>
            
<option value="japan">日本歌手</option>
            
<option value="occident">欧美歌手</option>
 
</select>

结果抛出异常:

66218 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.interceptor.ParametersInterceptor  - Setting params bandName => [  ] singerDtos[0].region => [ china ] singerDtos[0].name => [ fdsfd ] uploadContentType => [ audio/mp3 ] singerDtos[0].sex => [ m ] songName => [ ddd ] type => [ 1 ] uploadFileName => [ 20076857868205.mp3 ] upload => [ C:/Program Files/apache-tomcat-5.5.25/work/Catalina/localhost/Music/upload_25bd70bb_115a4017d5e__8000_00000001.tmp ]
66234 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.XWorkConverter  - Property: bandName
66234 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.XWorkConverter  - Class: edu.jlu.fuliang.action.UploadSongAction
66250 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.XWorkConverter  - converter is null for property bandName. Mapping size: 0
66250 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.XWorkConverter  - field-level type converter for property [bandName] = none found
66250 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.XWorkConverter  - global-level type converter for property [bandName] = none found
66250 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.XWorkConverter  - falling back to default type converter [com.opensymphony.xwork2.util.XWorkBasicConverter@1cbcc56]
66250 [http-8080-Processor24] DEBUG com.opensymphony.xwork2.util.InstantiatingNullHandler  - Entering nullPropertyValue [target=[edu.jlu.fuliang.action.UploadSongAction@d43997, com.opensymphony.xwork2.DefaultTextProvider@4486de], property=singerDtos]
66265 [http-8080-Processor24] ERROR com.opensymphony.xwork2.util.InstantiatingNullHandler  - Could not create and/or set value back on to object
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '[Ledu.jlu.fuliang.dto.SingerDto;': Could not resolve matching constructor
 at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:178)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:800)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowire(AbstractAutowireCapableBeanFactory.java:258)
 at com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:145)
 at com.opensymphony.xwork2.util.InstantiatingNullHandler.createObject(InstantiatingNullHandler.java:123)
 at com.opensymphony.xwork2.util.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:104)
 at ognl.ASTProperty.getValueBody(ASTProperty.java:94)
 at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
 at ognl.SimpleNode.getValue(SimpleNode.java:210)
 at ognl.ASTChain.setValueBody(ASTChain.java:168)
 at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
 at ognl.SimpleNode.setValue(SimpleNode.java:246)

我们发现ParametersInterceptor被调用后,委托给SpringObjectFactory来实例化Ledu.jlu.fuliang.dto.SingerDtoorg.springframework.beans.factory.BeanCreationException: Error creating bean with name '[Ledu.jlu.fuliang.dto.SingerDto;': Could not resolve matching constructor结果实例化失败.SingerDto应该不受Spring ioc容器管理吧,难道是这个问题,在struts 2 参考文档中没有找到类似的例子,后来我把SingerDto[] singerDtos;改成List<SingerDto> singerDtos,结果好使了.我又在网上搜搜struts2是否支持数组,结果在一个网站上搜到这个结果:

Struts doesn't support array creation due to an issue with size determination. Kinda what I though earlier. So, I've changed it over to use a List<Integer> and that works fine.

The docs are very misleading on this point. I'd be more than happy to clean up the type conversion doc and also create an collection handling doc to help folks out with this issue. Let me know if I can help out at all.

作者同样使用了List<Integer>代替了Integer[]结果成功.struts2是否支持创建数组还是一个bug,现在还不知道,但List来代替数组就可以避免这个的错误.

Struts2的OGNL遍历数组、List、简单的Map

一、简介 可以遍历数据栈里面的任何数组,集合等等 在使用这个标签的时候有三个属性值得我们关注 1. value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如...
  • nature_fly088
  • nature_fly088
  • 2013年02月12日 23:48
  • 9392

Ognl访问数组、List和Map

数组 package com.xs; import ognl.Ognl; import ognl.OgnlContext; import ognl.OgnlException; public cl...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2013年12月25日 14:03
  • 2694

关于struts2中使用OGNL表达式取值,取不到值的原因及解决方法

struts2中使用的OGNL表达式在拿action中的值的时候无论如何都取不到。 UserAction.java   这个类查出了一个“lists”,也就是我在jsp页面中要取的值。 p...
  • sheng_xinjun
  • sheng_xinjun
  • 2016年11月29日 18:36
  • 1660

如何在Struts2中获取spring的实例化对象

WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationCo...
  • zhoudapeng8023
  • zhoudapeng8023
  • 2017年04月26日 12:04
  • 153

【j2ee spring】18、如何在Struts2中获取spring的实例化对象

如何在Struts2中获取spring的实例化对象WebApplicationContext webApplicationContext = WebApplicationContextUtils.ge...
  • cutter_point
  • cutter_point
  • 2015年04月02日 20:15
  • 766

Struts2的OGNL遍历数组、List、简单的Map

一、简介     可以遍历 数据栈里面的任何数组,集合等等 在使用这个标签的时候有三个属性值得我们关注      1. value属性:可选的属性,value属性是指一个被迭代的集合,使...
  • crackly
  • crackly
  • 2013年07月05日 16:28
  • 487

jQuery发送含有数组参数的ajax请求以及后台Struts2的OGNL解析错误

jQuery发送含有数组参数的ajax请求以及后台Struts2的OGNL解析错误 前几天回家了一趟,唉,回家的感觉真爽。 不多废话,jQuery在发送ajax请求时,如果请求的参...
  • xue_feitian
  • xue_feitian
  • 2012年04月13日 09:45
  • 4014

Struts2的OGNL经典实例

OGNL:对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,不但可以任意存取对象的属性还可以调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。     ...
  • tjcyjd
  • tjcyjd
  • 2011年11月01日 12:42
  • 5526

Struts2基础之十一:OGNL实例

一:显示JSP OGNL主要是显示时候的筛选公式,总结在一个JSP里,用法比较全了 结果: 1.从valueStack中直接取得参数 http://127.0.0.1:808...
  • ruantao1989
  • ruantao1989
  • 2012年10月15日 22:37
  • 419

struts2 Ognl表单提交问题

  • 2012年05月31日 14:18
  • 24KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts2 OGNL实例化数组的问题.
举报原因:
原因补充:

(最多只允许输入30个字)