`

struts2 OGNL实例化数组的问题.

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

[color=red]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.[/color]

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


  


  
分享到:
评论
2 楼 fuliang 2008-09-27  
goodfifa07 写道

请问楼主怎么捕获用数组发生的异常

把logger级别调到debug,各种信息都会有。
1 楼 goodfifa07 2008-09-27  
请问楼主怎么捕获用数组发生的异常

相关推荐

    Struts2_OGNL

    Struts2_OGNL是一个关于使用Struts2框架与OGNL(Object-Graph Navigation Language)表达式的实例。Struts2是一个流行的Java开源MVC框架,它极大地简化了Web应用的开发,而OGNL则是Struts2中用于数据绑定和表达式语言...

    struts2结合spring的jar包.rar

    - **Spring的依赖注入(DI)**:Spring通过DI可以管理Struts2 Action的生命周期,提供对象实例化、初始化、销毁等操作,减轻了对单例模式的依赖。 - **Spring的AOP**:Spring的AOP可以用来实现事务管理、权限控制等...

    struts ognl

    Struts OGNL详解 Struts 2框架是基于MVC设计模式的Java ...总结,Struts 2与OGNL的结合提供了强大的数据绑定和表达式处理能力,但也需要注意安全问题。理解和熟练运用OGNL可以帮助我们更好地构建和维护Struts 2应用。

    struts2入门实例1

    struts2 最新的入门实例 我自己总结的 呵呵,欢迎提出宝贵的意见 1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp--------------...

    struts2入门实例2 经典入门必备

    1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...

    struts2入门实例4 经典入门必备

    1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...

    struts2入门实例3 经典入门必备

    1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp-------------------------------采用struts标签的登陆页面 login_struts_...

    struts2中的ActionContext与ognl

    ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...

    struts2核心技术整理

    5. **Value Stack**:值栈是Struts2的一个重要概念,它是一个对象容器,存储Action实例和需要传递到视图的数据。视图可以直接通过OGNL(Object-Graph Navigation Language)表达式访问值栈中的对象。 二、OGNL...

    struts2中siterator 标签的使用详解 及 OGNL用法.docx

    OGNL 是 Struts2 中的强大表达式语言,它允许我们方便地访问和操作值栈中的对象。例如,如果 `userList` 存储在请求作用域中,我们可以这样引用: ```jsp ``` 8. **s:bean 标签和 Counter 示例** `s:bean` ...

    Struts2框架基础 二

    ### Struts2框架基础二:深入理解OGNL与拦截器 #### 一、OGNL概述 **OGNL**(Object-Graph Navigation Language)是Struts2框架中的一个强大的表达式语言,用于获取或设置Java对象的属性值。它支持对对象图进行导航...

    Struts2+Spring+Hibernate3.2+整合文档及事例程序.zip

    通过学习这些内容,开发者可以了解到如何在实际项目中实现SSH框架的集成,包括Spring管理Struts2的Action、Hibernate的数据持久化以及它们之间的协同工作。 总的来说,这个压缩包资料涵盖了Java Web开发中的关键...

    Struts2的总结和Strut2集成Spring

    通过在Spring的配置文件中定义Bean,可以将Action和其他组件的实例化和依赖关系交由Spring容器管理,实现了控制反转。 #### Struts2实现文件上传 Struts2内置了文件上传支持,只需在Action中声明`File`和`File`...

    struts2-jar包

    Struts2使用它来实现动态代理,这在处理拦截器和动作类的实例化时非常有用。 `commons-lang3-3.1.jar`是Apache Commons Lang库的第三个版本,提供了许多Java语言核心类的扩展,如字符串操作、日期时间处理、数组...

    struts2标签解释

    - 初始化阶段:Struts2框架根据标签创建一个实例。 - 执行阶段:执行标签的方法,如doStartTag()和doEndTag()。 - 渲染阶段:生成HTML代码,插入到JSP页面中。 7. **自定义标签** 如果核心和展示标签库不能满足...

    struts-2.0.11.1源码

    OGNL是Struts 2中的表达式语言,用于在Action和视图之间传递数据。开发者可以用OGNL访问对象属性、执行方法和操作数组、集合等。 7. **插件体系**: Struts 2支持插件架构,这使得扩展框架变得非常容易。例如,...

    struts2.0标签使用源码

    当JSP解析器遇到一个Struts2标签时,会根据TLD找到对应的标签处理类(TagHandler)并实例化,执行其doStartTag()和doEndTag()等方法。例如,`s:property`标签对应的处理类可能是`PropertyTag`。 在`PropertyTag`中...

    struts2标签史上最详细的struts2标签介绍

    - 解析:Struts2解析标签,生成标签实例。 - 初始化:设置属性值,准备执行。 - 执行:根据标签逻辑处理数据和输出内容。 - 清理:释放资源,结束标签生命周期。 8. **与JSTL标签的比较** - Struts2标签更强大...

Global site tag (gtag.js) - Google Analytics