2010-03-19 21 views
14

जेएसएफ 2 आवेदन में किसी संपत्ति को मान्य करने की समस्या का सामना करते समय दो मुख्य दृष्टिकोण हैं।बीन सत्यापन वीएस जेएसएफ सत्यापन

ManagedBean पर सत्यापन की परिभाषा एक एनोटेशन

@ManagedBean 
public class MyBean { 
    @Size(max=8) 
    private String s; 

    // Getters setters and other stuff. 
} 

का उपयोग कर या JSF पृष्ठ पर यह घोषणा की:

<h:inputText value="#{myBean.s}"> 
    <f:validateLength maximum="8"/> 
</h:inputText> 

ऐसा होता है कि मैं उनमें से कोई भी के लिए तय नहीं कर सकता। पहला एक अच्छा है क्योंकि यह जेएसएफ पृष्ठों से कुछ कोड हटा देता है (जो हमेशा अच्छा होता है क्योंकि उन पृष्ठों को परिभाषा के अनुसार आंखों के अनुकूल नहीं हैं) लेकिन जेएसएफ फ़ाइल की जांच करते समय पेज के साथ क्या हो रहा है, 'एक नज़र में' देखना मुश्किल हो जाता है ।

आपको कौन सा लगता है स्पष्ट है? अच्छे? बेहतर?

उत्तर

17

मैं प्रबंधित बीन पर सत्यापन के लिए पंप करता हूं, यह मॉडल दृश्य नियंत्रक में जेएसएफ दृश्य से तर्क को हटा देता है। और मॉडल को प्रदर्शित करने के लिए जेएसएफ को जिम्मेदार रखना चाहिए। यह भी प्रबंधित बीन पर यह सुनिश्चित करता है कि जहां कहीं भी यह अद्यतन अद्यतन किया गया है लागू किया गया है। यह अधिक DRY है (खुद को दोहराना मत)।

+1

फिर भी: field.message=The number of digits must be less or equal than {max}.

  • फिर सेम विशेषता एनोटेशन भीतर मान का उपयोग सत्यापन में उपयोग किए गए समान मानों के लिए अधिकतम लम्बाई या आकार या किसी अन्य विज़ल मान को प्रतिबंधित करना। – djmj

  • +0

    @ डेविड वाटर्स, दोनों बीन सत्यापन और जेएसएफ सत्यापन समान जीवन चक्र में या विभिन्न जीवनशैली में होते हैं, मेरा मतलब है कि जेएसएफ सत्यापन बीन सत्यापन से पहले होता है? और क्लाइंट पक्ष में जेएसएफ सत्यापन होता है? –

    +0

    @ महमूद सालेह - हाय महमूद, क्या मैं आपके प्रश्न को एक प्रश्न के रूप में पूछने का सुझाव नहीं दे सकता हूं, आपको लोगों की एक विस्तृत श्रृंखला से बेहतर प्रतिक्रिया और उत्तर मिलेगा। –

    3

    रिचफेस आपको एक साथ उपयोग करने की अनुमति देता है। <rich:graphValidator> (और beanValidator भी देखें) देखें।

    ये टैग कहते हैं: "javax.validation (या हाइबरनेट वैधकर्ता) नियमों के आधार पर जेएसएफ सत्यापन लागू करें"।

    +0

    दोनों बीन सत्यापन और जेएसएफ सत्यापन समान जीवन चक्र में या विभिन्न जीवनशैली में होते हैं, मेरा मतलब है कि जेएसएफ सत्यापन बीन सत्यापन से पहले होता है? और क्लाइंट पक्ष में जेएसएफ सत्यापन होता है? –

    4

    प्रबंधित बीन दृष्टिकोण का एक और फायदा है। यदि जेएसएफ द्वारा प्रदर्शित की जा रही जानकारी वेब सेवा (डब्ल्यूएस) के माध्यम से भी उपलब्ध है तो वास्तविक सत्यापन कोड को सत्यापन वर्ग में फैलाया जा सकता है और जेएसएफ और डब्लूएस दोनों के लिए यह सुनिश्चित किया जाता है कि सिस्टम में सभी जानकारी मान्य है।

    0

    मैं जेएसएफ सत्यापन पसंद कर सकता हूं क्योंकि, मैं बीन सत्यापन के हिस्से के रूप में संसाधन बंडल त्रुटि संदेश प्रदान करने में असमर्थ हूं। उदाहरण के लिए आप इस

    @NotNull(message = ResourceBundleHelper.getString("error_message")) 
    

    ऐसा नहीं कर सकते क्योंकि "संकलित स्थिरांक केवल पुरातन और स्ट्रिंग्स हो सकता है"। निरंतर संदेशों को परिभाषित करने के लिए आसपास काम कर रहे हैं लेकिन यह बदसूरत लगेगा।

    1

    @ user1730904, आप संसाधन संसाधन बंडल फ़ाइल में संदेशों को परिभाषित कर सकते हैं जैसा कि बीन सत्यापन विनिर्देश दस्तावेज़ में बताया गया है। आवश्यक कदम सरल हैं:

    1. कुछ classpath फ़ोल्डर (जैसे src/main/resources/) में ValidationMessages_xx_XX.properties नाम की एक फ़ाइल बनाएँ। कहाँ xx_XXes_ES, en_US, आदि है सामग्री हो सकता है कहां: उदाहरण के लिए, @Size(max = 20, message="{field.message}")
    ज्यादातर मामलों आप जीयूआई में दोहराना में
    संबंधित मुद्दे