2013-02-20 49 views
5

我只是想知道如果有可能告诉一个@InitBinder,在一个空的形式浮点值将被转换为0春InitBinder:绑定float字段为空或空值0

我知道, float是一种原始数据类型,但我仍然希望将空值或空值转换为0.

如果可能,我该如何实现这一目标?

否则我会使用字符串而不是浮动的只是做一个变通方法

回答

2

是你总是可以做到这一点.Spring有CustomNumberEditor这是Number的子类整型,长整型,浮点一个可定制的属性编辑器,Double.It默认情况下,注册在BeanWrapperImpl中已经,但是,可以通过它注册自定义实例覆盖定制editor.It意味着你可以扩展一个类这样

public class MyCustomNumberEditor extends CustomNumberEditor{ 

    public MyCustomNumberEditor(Class<? extends Number> numberClass, NumberFormat numberFormat, boolean allowEmpty) throws IllegalArgumentException { 
     super(numberClass, numberFormat, allowEmpty); 
    } 

    public MyCustomNumberEditor(Class<? extends Number> numberClass, boolean allowEmpty) throws IllegalArgumentException { 
     super(numberClass, allowEmpty); 
    } 

    @Override 
    public String getAsText() { 
     //return super.getAsText(); 
     return "Your desired text"; 
    } 

    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
     super.setAsText("set your desired text"); 
    } 

} 

然后在你控制器正常进行注册:

@InitBinder 
    public void initBinder(WebDataBinder binder) { 

     binder.registerCustomEditor(Float.class,new MyCustomNumberEditor(Float.class, true)); 
    } 

这应该完成任务。

+0

谢谢,作品像魅力 – 2013-02-20 10:21:43

+0

欢迎您... – 2013-02-20 10:24:53

3

定义CustomNumberEditor为的subclsss作为

import org.springframework.beans.propertyeditors.CustomNumberEditor; 
import org.springframework.util.StringUtils; 

public class MyCustomNumberEditor extends CustomNumberEditor { 

    public MyCustomNumberEditor(Class<? extends Number> numberClass) throws IllegalArgumentException { 
     super(numberClass, true); 
    } 

    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
     if (!StringUtils.hasText(text)) { 
      setValue(0); 
     }else { 
      super.setAsText(text.trim()); 
     } 
    } 

} 

然后在你的控制器类(我创建了我所有的应用程序控制器一BaseController,我需要这个行为中所有数字基本类型在我的应用程序,所以我干脆在我的BaseController中定义这个),为各种基本类型注册绑定器。 请注意,MyCustomNumberEditor的构造函数参数必须是Number的子类,而不是原始类类型。

@InitBinder 
public void registerCustomerBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(double.class, new MyCustomNumberEditor(Double.class)); 
    binder.registerCustomEditor(float.class, new MyCustomNumberEditor(Float.class)); 
    binder.registerCustomEditor(long.class, new MyCustomNumberEditor(Long.class)); 
    binder.registerCustomEditor(int.class, new MyCustomNumberEditor(Integer.class)); 
....  
}