表单:
<tr><td colspan="2">to_user:<form:checkbox path="flowDefines[${cur.index}].toUser" value="1" />
to_ip:<form:checkbox path="flowDefines[${cur.index}].toIp" value="1" />
  </td>
</tr>提交以后,对应的model是:
private int toUser;
private int toIp;现在的问题是:如果checkbox不选中,自动转化就会出错:null 无法转化为 int。然后,在controller里面写一个:
@InitBinder
  public void initDataBinder(WebDataBinder binder) {
  PropertyEditorSupport propEditor = new PropertyEditorSupport(){
  @Override
  public void setAsText(String text) {
  if (text == null || text.trim().equals("") || text.trim().equals("null")) {
  setValue(0);
  }else {
  String value = text.trim();
  setValue(Integer.valueOf(value));
  }
  }
  };
  binder.registerCustomEditor(int.class, propEditor);
 }
还是报同样的错误,null 无法转化为 int。我知道,用Integer可以转化不出错,但是,不想用Integer,int有默认值0,Integer的默认是null。

解决方案 »

  1.   

    你可以用Integer set方法改造下 如果NULL SET进去的时候赋值0不就OK 了
      

  2.   


    谢谢,我的需求是不用Integer
      

  3.   

    应该不行吧,你的到后台的遍历不对吧
    我们也是sprinmvc,感觉你的 model有问题吧int型怎么存多个
      

  4.   

    在jsp页面判断是否选中该对象,如果选中可以直接提交,如果未选中把值设为0设为选中(或者把值放在一个隐藏域中),提交即可
      

  5.   


    今天debug了一个上午,终于找到了解决办法:
    private static class IntEditor extends CustomNumberEditor{
    public IntEditor(){
    super(Integer.class,true);
    }
    @Override
    public void setValue(Object value) {
    if(value == null){
    super.setValue(0);
    }else{
    super.setValue(value);
    }
    }
    }
    //网上流传的重写setAsText,根本就是行不通的,因为在TypeConverterDelegate的doConvertTextValue方法里面:
    protected Object doConvertTextValue(Object oldValue, String newTextValue, PropertyEditor editor) {
    try {
    editor.setValue(oldValue);
    }
    catch (Exception ex) {
    if (logger.isDebugEnabled()) {
    logger.debug("PropertyEditor [" + editor.getClass().getName() + "] does not support setValue call", ex);
    }
    // Swallow and proceed.
    }
    editor.setAsText(newTextValue);
    return editor.getValue();
    }
    //可以看出来,重写setAsText是没用的。
      

  6.   

    看来像这种转换归根结底是逃不掉那一段null转int的逻辑的
      

  7.   

    我也研究了一下springMVC,但是觉得还是struts2好,简单易用。像这样的表单传值,struts2可以有自动转换类型,不用担心,只需要把表单元素的name属性设好就可以了。