2012-09-13 13 views
6

इस स्ट्रिंग को ट्रिम करने का सबसे अच्छा तरीका क्या है/ट्रिम कोड डालने का सबसे अच्छा स्थान कहां है?ट्रिमिंग स्ट्रूट्स 2 टेक्स्टफील्ड स्ट्रिंग इनपुट

मैं अपने jsp में निम्नलिखित पाठ फ़ील्ड है कहते हैं:

<s:textfield label="First Name" name="person.firstname"/> 

कार्रवाई वर्ग:

public class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware { 
    private Person person; 
    // Getters, setters and action logic 
} 

सेम:

public class Person implements Serializable { 
    private String lastname; 
    private String firstname; 
    // Getters and setters 
} 

मैं में डिफ़ॉल्ट सेटिंग बदल सकते हैं बीन लेकिन यह एक हैक की तरह लगता है:

public void setFirstname(String firstname) { 
    this.firstname = firstname.trim(); 
} 

संपादित: struts2 trim all string obtained from forms जहां यह भी कुछ है कि "सही" विधि एक इंटरसेप्टर उपयोग करने के लिए है ने सुझाव दिया है: मैं भी इस सवाल का देखा था।

एक इंटरसेप्टर "सही" तरीका क्यों है? बीन के सेटर्स को बदलने के बारे में क्या गलत है?

उत्तर

3

संक्षिप्त उत्तर डिफ़ॉल्ट रूप से नहीं है, ऐसा करने के लिए तंत्र में कोई निर्माण नहीं है और आपको या तो अपनी एक्शन क्लास में ऐसा करने की ज़रूरत है या किसी प्रकार की जावा-स्क्रिप्ट आपके लिए यह करेगी।

अन्य संभावित तरीका यह है कि ऐसा करने के लिए एक इंटरसेप्टर बनाने के लिए विकल्प को छोड़कर या इसी तरह की ट्रेक जैसी कुछ पसंद है।

मेरा मानना ​​है कि इंटरसेप्टर ऐसा करने का एक अच्छा तरीका है, इस तरह के इंटरसेप्टर एस 2 के साथ बेहतर है।

+0

धन्यवाद उमेश। मन आपके उत्तर पर थोड़ा सा विस्तार कर रहा है और समझाता है कि क्यों इंटरसेप्टर जाने का रास्ता है? – nmc

+1

@ एनएमसी कार्यान्वयन कि इंटरसेप्टर का उपयोग करना अच्छा कारण है, हम इसे सामान्य तरीके से कर सकते हैं और किसी भी कार्रवाई पर लागू कर सकते हैं। –

6

यह Struts2 converters के साथ किया जा सकता है।

public class TrimmingStringConverter extends StrutsTypeConverter { 

    public Object convertFromString(Map ctx, String[] values, Class arg2) { 
     if (values != null && values.length > 0) { 
      return values[0].trim(); 
     } 

     return null; 
    } 

    public String convertToString(Map ctx, Object o) { 
     if (o != null) { 
      return o.toString(); 
     } 
     else { 
      return null; 
     } 
    } 

    public Object convertValue(Map context, Object o, Class toClass) 
    { 
     if (o == null) { 
      return null; 
     } else if (toClass == java.lang.String.class) { 
      if (o instanceof String[]) { 
       String[] os = (String[]) o; 

       if (os.length > 0) { 
        return os[0].trim(); 
       } 
      } 

      return o.toString().trim(); 
     } 

     return super.convertValue(context, o, toClass); 
    } 
} 

यह xwork-conversion.properties में पंजीकृत होना चाहिए: java.lang.String = es.jogaco.webapp.TrimmingStringConverter

यह सभी उपयोगकर्ता इनपुट करने के लिए लागू किया जाएगा।

यदि आपके पास डिफ़ॉल्ट स्ट्रूट 2 इंटरसेप्टर हैं तो यह काम करेगा। struts2 डॉक से उद्धरित:

डिफ़ॉल्ट रूप से, रूपांतरण इंटरसेप्टर डिफ़ॉल्ट ढेर

में struts-default.xml में शामिल है प्लस मैं इसे अपने struts2 अनुप्रयोग में काम कर रहा है।

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