2013-02-20 67 views
5

एक नाव क्षेत्र की खाली या शून्य मान बाँध फ्लोट एक आदिम डेटा प्रकार है लेकिन मैं अभी भी शून्य या खाली मानों को 0स्प्रिंग InitBinder: मैं बस अगर यह एक @InitBinder है कि एक के रूप में खाली नाव मूल्यों 0.</p> <p>में रूपांतरित हो जाएगा मैं जानता हूँ कि यह बताने के लिए संभव है सोच रहा हूँ के रूप में 0

यदि यह संभव है, तो मैं इसे कैसे प्राप्त कर सकता हूं?

अन्यथा मैं सिर्फ एक नाव के बजाय एक स्ट्रिंग का उपयोग कर एक समाधान कर देंगे

उत्तर

2

हाँ आप .Spring एक CustomNumberEditor जो पूर्णांक, लांग, फ्लोट की तरह किसी भी संख्या उपवर्ग के लिए एक अनुकूलन संपत्ति संपादक है कि हमेशा कर सकता है , 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

धन्यवाद, आकर्षण –

+0

आपका स्वागत है ... –

3

रूप

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()); 
     } 
    } 

} 

फिर CustomNumberEditor के subclsss परिभाषित करें अपने नियंत्रक वर्ग में (मैं अपने सभी आवेदन नियंत्रकों के लिए एक BaseController बनाने के लिए, मैं अपने आवेदन में सभी संख्यात्मक आदिम प्रकार के लिए इस व्यवहार की जरूरत है, तो मैं बस इसे मेरे बेसकंट्रोलर में परिभाषित करें), विभिन्न आदिम प्रकारों के लिए बाइंडर पंजीकृत करें। ध्यान दें कि MyCustomNumberEditor का कन्स्ट्रक्टर पैरामीटर आदिम वर्ग प्रकार के बजाय संख्या का उप-वर्ग होना चाहिए।

@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)); 
....  
}