struts2有默认的类型转的,基本类型都可以转换的:
boolean和Boolean:完成字符串和布尔值之间的转换;
char和Character:完成字符串和字符之间的转换;
int和Integer:完成字符串和整形之间的转换;
long和Long:完成字符串和长整形之间的转换;
flota和Float:完成字符串和单精度浮点值之间的转换;
double和Double:完成字符串和双精度浮点值的转换;
Date:完成字符串和日期类型之间的转换!;
数组:默认情况下,数组元素是字符串,如果用户提供了自定义类型转换器,也可以是其他复合类型转换器;
集合:默认情况下,假定集合元素为String,并创建一个新的ArrayList封装所有的字符串。
异常1、在 Struts2 里面,当页面向服务器提交参数时报 ognl.MethodFailedException 和 java.lang.NoSuchMethodException: setMoney([Ljava.lang.String;)] 异常,实际上 money 并不是 String 类型,而是 float 类型或者其他类型,但是参数值却仍能够正确传递过去。
ognl.MethodFailedException: Method "setMoney" failed for object com.yakoo5.cdhms.action.SaleManageAction@221c75 [java.lang.NoSuchMethodException: setMoney([Ljava.lang.String;)]
解决方法:
将 money 的类型修改为 Float 类型 ( 包装类型 ) ,并且 getter , setter 方法的返回类型和参数类型都要修改成 Float 类型。即可解决此问题。
还有,如果你要传递的参数时 Struts2 的 Action 的属性对象的子属性,如: SaleManageAction.SaleRecord.money , money 是 float 类型,最好也改成 Float 类型,不然会报同样的错误。
建议: 只要从页面传递的参数是 Struts2 的 Action 的属性或者属性对象的子属性,都把它们的类型从原始类型 (int,float,double) 修改改成包装类型 (Integer,Float,Double) ,当然它们的 setter 和 getter 方法的参数和返回值也要修改成包装类型,这样就可以避免不必要的此类异常。
异常2、Date类型转换失败,警告信息:Error setting expression 'date' with value '[Ljava.lang.String;@1ee5b36'ognl.MethodFailedException: Method "setDate" failed for object com.shengsiyuan.struts2.LoginAction@138b4ed [java.lang.NoSuchMethodException:
解决方法:
分析原因为从JSP页面传过来的String值2011-10-10末能正确的转换为Date类型的值。
但结果还是能“较正确的显示”,如下:
后经查询(http://www.iteye.com/problems/38729),得知,问题的确出在JSP页面上的输入格式上,正确格式为:月/日/年,如(07/05/2012)
现在的输出为: