表单:
<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。
<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。
谢谢,我的需求是不用Integer
我们也是sprinmvc,感觉你的 model有问题吧int型怎么存多个
今天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是没用的。