2013-08-25 8 views
9

मैं अपने आवेदन में एक डेटा प्रकार फू कहा जाता है जो इस तरह दिखता है:स्प्रिंग एमवीसी के साथ आप नियंत्रक-विशिष्ट फ़ील्ड फॉर्मेटर को कैसे कॉन्फ़िगर करते हैं?

public class Foo { 
    // synthetic primary key 
    private long id; 

    // unique business key 
    private String businessKey; 

    ... 
} 

इस प्रकार वेब अनुप्रयोग भर में कई रूपों में प्रयोग किया जाता है और आम तौर पर आप इसे आगे और पीछे कन्वर्ट करने के लिए id संपत्ति का उपयोग कर चाहते हैं इसलिए मैंने एक स्प्रिंग 3 फॉर्मेटर लागू किया है जो वैश्विक स्प्रिंग रूपांतरण सेवा के साथ उस फॉर्मेटर को पंजीकृत करता है और पंजीकृत करता है।

हालांकि, मेरे पास एक फॉर्म उपयोग केस है जहां मैं businessKey का उपयोग करके कनवर्ट करना चाहता हूं। ऐसा करने के लिए एक फॉर्मेटर को लागू करना काफी आसान है, लेकिन मैं बस इस विशिष्ट रूप के लिए उस फ़ॉर्मेटर का उपयोग करने के लिए कैसे कहूं?

मैं http://static.springsource.org/spring/previews/ui-format.html जो क्षेत्र विशेष formatters पंजीकरण के बारे में एक अनुभाग है पर एक दस्तावेज मिला (5.6.6 तल पर सभी तरह देखें) जो इस उदाहरण प्रदान करता है:

@Controller 
public class MyController { 
    @InitBinder 
    public void initBinder(WebDataBinder binder) { 
    binder.registerFormatter("myFieldName", new MyCustomFieldFormatter()); 
    }   
    ... 
} 

यह वह जगह है मैं वास्तव में क्या चाहते हैं , लेकिन यह 200 9 से एक पूर्वावलोकन दस्तावेज़ है और यह registerFormatter विधि को अंतिम रिलीज एपीआई में नहीं बनाया गया है।

आपको यह कैसे करना चाहिए?

+2

ऐसा लगता है आप नहीं देख सकते हैं, [एसपीआर-7773] (https: //jira.springsource। संगठन/ब्राउज़/एसपीआर -7773), [एसपीआर -6069] (https://jira.springsource.org/browse/SPR-6069) और [एसपीआर -6015] (https://jira.springsource.org/browse/ एसपीआर -6015) –

+0

वाह, आप सही हैं। यह एक बड़ा छेद है और जेआईआरए प्रविष्टियों से निर्णय लेता है, ऐसा नहीं कि स्प्रिंग टीम बहुत गंभीरता से लेती है। – Jlaud

+0

आप नकल प्रारूप संख्या और एनोटेशन के साथ तिथियों की नकल कर सकते हैं - 'एनोटेशनफॉर्मेटर फैक्ट्री'। http://docs.spring.io/spring/docs/3.1.4.RELEASE/javadoc-api/org/springframework/format/AnnotationFormatterFactory.html –

उत्तर

2

हमारे आवेदन में, हम इसके लिए PropertyEditorSupport कक्षा का उपयोग करते हैं। कैलेंडर से निपटने, लेकिन आप किसी भी कस्टम वर्ग के लिए उपयोग कर सकते हैं, बस getAsText() और setAsText() तरीकों को ओवरराइड के लिए सरल उदाहरण:

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Calendar.class, new PropertyEditorSupport() { 
     @Override 
     public void setAsText(String value) { 
      try { 
       Calendar cal = Calendar.getInstance(); 
       cal.setTime(new SimpleDateFormat("dd-MM-yyyy").parse(value)); 
       setValue(cal); 
      } catch (ParseException e) { 
       setValue(null); 
      } 
     } 

     @Override 
     public String getAsText() { 
      if (getValue() == null) { 
       return ""; 
      } 
      return new SimpleDateFormat("dd-MM-yyyy").format(((Calendar) getValue()).getTime()); 
     } 
    }); 
} 
+0

हां, जब आप PropertyEditors का उपयोग कर रहे हैं तो यह वही है जो आपको माना जाता है कर। लेकिन प्रॉपर्टी एडिटर फॉर्मेटर्स के पक्ष में चरणबद्ध हो रहे हैं। और स्वरूपकों के साथ, यह संभव नहीं है। – Jlaud

+0

ओह, मुझे प्रॉपर्टी एडिटर चरणबद्ध होने के बारे में पता नहीं था। – Kejml

संबंधित मुद्दे