2012-10-03 14 views
22

मैं इस तरह एक विधि है:स्प्रिंग - instantiating एक त्रुटियाँ आपत्ति

boolean result = validateMessage("hi", new Errors()) ; 

हालांकि, इन्स्टेन्शियशन इस तरह की:

public boolean validateMessage(String message, Errors errors) { 
    if (!StringUtils.hasLength(message)) { 
    errors.rejectValue(wrapperName + "message", "EMPTY_MESSAGE", EMPTY_MESSAGE_ERRORMSG) ; 
      return false ; 
     } 
     return true ; 
    } 

मैं की तरह एक नया Errors वस्तु के साथ इस विधि कॉल करने, चाहते हैं Errors के लिए अनुमति नहीं है। कृपया सलाह दें।

तो Errors साथ नहीं, मैं एक खाली (नया) BindingResult

+2

आप एक इंटरफेस को इंस्टाल नहीं कर सकते हैं। 'बाइंडएक्सप्शन', 'एस्केड एरर' कार्यान्वयन कक्षाएं हैं। –

+0

संबंधित: http://stackoverflow.com/questions/9744988/writing-junit-tests-for-spring-validator- कार्यान्वयन – Igor

उत्तर

15

Errors और BindingResult इंटरफेस हैं, इसलिए उन्हें तत्काल नहीं किया जा सकता है। आपका एकमात्र विकल्प उन कक्षाओं में से एक का उपयोग करना होगा जो Errors लागू करता है। see here for details -

आप org.springframework.validation.BindException इस्तेमाल कर सकते हैं, इस Errors लागू करता है।

+1

जो काम नहीं करता है क्योंकि 'BindException' को' त्रुटियों ' –

+0

पर नहीं डाला जा सकता है यदि मैं इसे कास्ट करने का प्रयास करता हूं, तो मुझे यह मिलता है:' java.lang.ClassCastException: java.net.BindException को org.springframework.validation पर नहीं डाला जा सकता .rrors'। तो जाहिर है, यह संभव नहीं है। – th3an0maly

+0

org.springframework.validation.BindException त्रुटियों को लागू करता है, इसलिए यह संभव होना चाहिए। – Jonathan

1

आप का दृष्टांत सकते वर्ग वस्तुओं का उपयोग कर इस लक्ष्य को हासिल कर सकते हैं। लेकिन Errors एक इंटरफ़ेस है, कक्षा नहीं। इसलिए, इसे तत्काल नहीं किया जा सकता है जैसे आप करने की कोशिश कर रहे हैं।

+0

लेकिन इसके आसपास कुछ रास्ता होना चाहिए। क्या आप कह रहे हैं कि मैं क्या करने की कोशिश कर रहा हूं असंभव है? :( – th3an0maly

1

विधि उस ऑब्जेक्ट की अपेक्षा कर रही है जो Errors इंटरफ़ेस लागू करती है। त्रुटियों इंटरफेस को लागू करने वाली कोई भी कक्षा काम करेगी। यदि आप org.springframework.validation.BindException जैसी मौजूदा कक्षा का उपयोग नहीं करना चाहते हैं, तो आप एक अनाम आंतरिक कक्षा का उपयोग कर सकते हैं। मौजूदा कक्षाओं के लिए the Spring Docs देखें जो पहले से ही Errors लागू करता है। लेकिन अपने गुमनाम वर्ग सभी इंटरफ़ेस विधियों, जो काफी कई हैं और अपने कोड तेजी से कठिन बना देता है पढ़ने के लिए लागू करने के लिए की आवश्यकता होगी:

boolean result = validateMessage("hi", new Errors() { 

     @Override 
     public void setNestedPath(String nestedPath) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void rejectValue(String field, String errorCode, String defaultMessage) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void rejectValue(String field, String errorCode) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void reject(String errorCode, Object[] errorArgs, String defaultMessage) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void reject(String errorCode, String defaultMessage) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void reject(String errorCode) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void pushNestedPath(String subPath) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void popNestedPath() throws IllegalStateException { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public boolean hasGlobalErrors() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean hasFieldErrors(String field) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean hasFieldErrors() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean hasErrors() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public String getObjectName() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getNestedPath() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public List<ObjectError> getGlobalErrors() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public int getGlobalErrorCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public ObjectError getGlobalError() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Object getFieldValue(String field) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Class getFieldType(String field) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public List<FieldError> getFieldErrors(String field) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public List<FieldError> getFieldErrors() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public int getFieldErrorCount(String field) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public int getFieldErrorCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public FieldError getFieldError(String field) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public FieldError getFieldError() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public int getErrorCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public List<ObjectError> getAllErrors() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public void addAllErrors(Errors errors) { 
      // TODO Auto-generated method stub 

     } 
    }); 
+1

बिल्कुल यही कारण है कि मैं एक वैकल्पिक – th3an0maly

+0

की तलाश में था, आप हमेशा अपनी खुद की माईरर क्लास (या तो आंतरिक कक्षा या पैकेज निजी या यहां तक ​​कि सार्वजनिक कक्षा के रूप में) बना सकते हैं और तत्काल यह बता सकते हैं कि जब आप इसका उपयोग करना चाहते हैं। मैंने स्प्रिंग डॉक्स के लिंक को शामिल करने के लिए अपनी प्रतिक्रिया भी संपादित की है जो त्रुटियों के इंटरफ़ेस को लागू करने वाले अन्य स्प्रिंग क्लास सूचीबद्ध करती है –

8

एक अन्य विकल्प org.springframework.validation.BeanPropertyBindingResult, जो त्रुटियाँ लागू करता है उपयोग करने के लिए है। इस वस्तु BindingResult की एक ही कक्षा आप वसंत MVC नियंत्रक

Errors errors = new BeanPropertyBindingResult(objectToValidate, "objectName"); 
0

में प्राप्त यदि यह एक वसंत MVC अनुप्रयोग है की है और आप @Controllers उपयोग कर रहे हैं आप के हिस्से के रूप org.springframework.validation.BindingResult के रूप में अपने मान्यता वस्तु पारित कर सकते हैं जैसे मानचित्रण:

@RequestMapping(value="login.htm", method=RequestMethod.POST) 
public String doLogin(HttpServletRequest request, Model model, BindingResult errors) { 
    // ..... some validation code 

    String message = "My message"; 
    boolean valid = validateMessage(message, errors); 

    // .... some more code 
} 

यह स्पष्ट रूप से होने org.springframework.validation.Errors instantiating करने का एक वैकल्पिक तरीका है।

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