今天郁闷。。我的jsp文件里面。有多个复选文本框 <s:checkbox name="deleteIds" value="false" fieldValue="%{userId}">,我用的action用一个整型的数组接收 Integer[] deleteIds;   大家可能应该知道我的思路了。。我的目的是选择复选框,然后根据复选框里面的ID,删除一个或者多个用户但是郁闷的地方来了。。如果我不选择复选框,就给我报错误了 , 错误信息是:“Invalid field value for field 'deleteIds'”  当然 这个错误信息值struts2自带的,这个信息说明类型转换错误了。 我当时就郁闷了为什么会类型转换错误呢??当我把Integer[] deleteIds 换成ArrayList<Integer>  deleteIds  ,居然又没错。。我用System.out.println(deleteIds  ); 打印出来的效果是 "[ognl.NoConversionPossible]" 。说实话这句话是什么意思,我完全不明白。。我原本想的是空,但是不是。(呵呵,如果真的打出空,那我才认为真的有提问了。。还好打出的是个我不知道的东西,ognl原来本来就没接触过。还不是JAVA基础的问题哦。)所以希望 大家解释两点:
   1:[ognl.NoConversionPossible] 是什么东西
   2:为什么Integer[] deleteIds不行(我想第一个问题说清楚了。这个问题也应该就清楚了。所以重点强调的是第一个问题。)

解决方案 »

  1.   

    checkbox在不选中的情况下应该是一个空字符串,而你的Action里面定义的是Integer, 所以Struts会把一个空字符串强制转换成Integer,就会报异常了
    ognl.NoConversionPossible就是说Struts没办法把页面的值转换成你Action里面定义的值
    关于为什么换成ArrayList <Integer>  deleteIds为什么没有错误 我没有尝试,因为Struts默认情况下是把页面上这种类型的list放到数组里面的,所以用ArrayList的话,只有在loop里面的值的时候Struts才会去转换(你可以debug一下看看Action里面这个ArrayList到底放了什么东西)
    知道这个你就有思路怎么改了
      

  2.   

    你的前台的value是false,后台用Integer去接受,肯定转换失败。
      

  3.   


    这个问题和是不是struts2.0无关。
    这个朋友说的没错,
    不过,有一点。
    checkbox在不选中的情况下,上传的是null。
    不是空字符串。
    所以你后台要进行空值判断。
    这个问题,是IE造成的,
    和struts无关。
    MVC框架中,
    只有spring  MVC防了这一点。
    不过也产生了垃圾代码。
      

  4.   

    这个问题是struts2导致的。我再在项目中也遇到类似的问题,页面上有一组checkbox,映射到action中的 int[]。当不选中任何checkbox时出错。分析:
    1、做了两断代码对比,都是生成一组checkbox,一个用手写的<input type="checkbox">,另一个用struts2标签<s:checkbox>
       结果:手写的,服务器得到的是null,可以正常处理;用struts2标签,得到false,无法转换为int[],出错。2、看struts2源码
       发现原因在于struts2 checkbox 的template 和interceptor.
       在simple template中,对于每一个checkbox,都会生成一个hidden input,其name为"__checkbox_%checkbox的name%"
       struts2缺省使用了一系列的intecerptor,其中就有CheckboxInterceptor。在这个interceptor中,会判断是否选择了任意一个checkbox,如果没有,则将其值设为false(字符串形式)
       解决思路:
       a. 在页面中加入一个与checkbox同名的hidden input,指定一个特殊的值,在action中进行参数校验时处理
       b. 使用不同的模板
       c. 禁用Checkbox Interceptor
      d. 要求struts修改代码,或者自行修改,增加一个开关项,来选择是否为checkbox生成相应的hidden input
      

  5.   

    补充一下,使用的struts版本:2.0.11.2
      

  6.   

    是这个问题,我在做考试系统的时候考生提交试卷的时候有些题不选,提交到后台的就是null值,在后台判断一下就OK了