2012-11-20 7 views
7

जब ईमेल पता अमान्य है तो प्रदर्शित संदेश "अमान्य ईमेल। अमान्य ईमेल" है। मुझे पता है कि संदेश में दो भाग हैं: सारांश और विवरण। मुझे इन दोनों की ज़रूरत है, लेकिन मैं प्रत्येक में अलग-अलग जानकारी लेना चाहता हूं। मैं "अमान्य ईमेल: कृपया एक वैध ईमेल पता दर्ज करें" प्रदर्शित करने के लिए संदेश कैसे बदल सकता हूं?<p:messages> में डुप्लिकेट टेक्स्ट सारांश और विवरण

<p:messages showDetail="true" autoUpdate="true" closable="true" /> 
<h:panelGrid columns="2"> 
    <h:outputText value="#{label.email}: *" /> 
    <p:inputText required="true" value="#{userWizard.emailAddress}" 
     validatorMessage="#{label.invalidEmail}" label="#{label.email}"> 
     <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$"> 
     </f:validateRegex> 
    </p:inputText> 
</h:panelGrid> 
+0

यदि मैं वैधकर्ता संदेश को "अमान्य ईमेल: कृपया एक वैध ईमेल ईमेल पता दर्ज करें" में बदलता हूं, तो यह संदेश प्रदर्शित संदेश में दो बार प्रकट होता है: अमान्य ईमेल: कृपया एक मान्य ईमेल पता दर्ज करें अनधिकृत ईमेल: कृपया एक मान्य ईमेल पता दर्ज करें। – Seitaridis

उत्तर

8

इस के साथ validatorMessage (न converterMessage है और न ही requiredMessage) संभव नहीं है। मूल्य दोनों सारांश और विवरण के रूप में उपयोग किया जाएगा।

आप इसके बजाय कस्टम सत्यापनकर्ता homegrow को जिसमें आप दोनों भागों खुद साथ FacesMessage निर्माण कर सकते हैं देख सकते हैं। यह मानते हुए कि आप भी label.email एक label.email_detail जो संदेश विस्तार का प्रतिनिधित्व करता है के बगल में है, तो यह कुछ इस तरह दिखना चाहिए:

@FacesValidator("emailValidator") 
public class EmailValidator implements Validator { 

    private static final Pattern PATTERN = Pattern.compile("([^[email protected]]+)(\\.[^[email protected]]+)*@([^[email protected]]+\\.)+([^[email protected]]+)"); 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
     if (value == null || ((String) value).isEmpty()) { 
      return; // Let required="true" handle. 
     } 

     if (!PATTERN.matcher((String) value).matches()) { 
      String summary = context.getApplication().evaluateExpressionGet(context, "#{label.email}", String.class); 
      String detail = context.getApplication().evaluateExpressionGet(context, "#{label.email_detail}", String.class); 
      throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail)); 
     } 
    } 

} 

(ध्यान दें कि मैं दुनिया प्रभुत्व पर बेहतर तैयारी के लिए ईमेल regexp अनुकूलित; गैर चीनी, हिब्रू, सिरिलिक, आदि जैसे -लैटीन पात्रों अर्थात् डोमेन नाम में अनुमति दी जाती है और इस प्रकार भी नई IANA decision in 2010)

जो तब है

<p:inputText ... validator="emailValidator" /> 
के रूप में प्रयोग की जाने वाली के बाद से ईमेल पतों
+0

मैंने आपके समाधान का परीक्षण किया है और यह काम करता है। मैंने दो भागों को बदल दिया है। 'आवश्यक = सत्य' में वही समस्या है जो 'validatorMessage' (यह एक ही पाठ को दो बार प्रदर्शित करता है), इसलिए मैंने उसी ईमेल रीगेक्स के साथ खाली स्ट्रिंग मान सत्यापन को संभाला है। 'स्ट्रिंग' वर्ग में 'मिलान' विधि है और मैंने 'पैटर्न' वर्ग की बजाय उस विधि का उपयोग किया है। – Seitaridis

+1

आपका स्वागत है। 'आवश्यक =" सत्य "' केवल उस समस्या में होगा जब उसका सारांश और विवरण बिल्कुल वही होगा। फिर आपको जेएसएफ़ '' के 'javax.faces.component.UIInput.REQUIRED' और' javax.faces.component.UIInput.REQUIRED_DETAIL' गुणों को बदलना चाहिए। यह भी देखें http://www.mkyong.com/jsf2/customize-validation-error-message-in-jsf-2-0/ – BalusC

+0

'पैटर्न' दृष्टिकोण के रूप में, मैं 'स्ट्रिंग # मैचों के बारे में पूरी तरह से अवगत हूं () ', लेकिन यह हर बार पैटर्न को फिर से संकलित करता है जो काफी महंगा काम है। इसे एक बार स्थिर के रूप में संकलित करना और फिर इसका पुन: उपयोग करना बहुत तेज़ है। यह सिर्फ एक प्रदर्शन सुधार दृष्टिकोण है। – BalusC

4

प्रलेखन यहाँ के अनुसार: http://www.primefaces.org/docs/vdl/3.4/primefaces-p/messages.html

आप ऐसा ही कुछ कर सकता है:

<p:messages showSummary="true" showDetails="true" /> 

तुम भी उन्हें अलग रख सकते हैं ... स्टाइल के लिए:

<p:messages showSummary="false" showDetails="true" /> 
<p:messages showSummary="true" showDetails="false" /> 

लेकिन आप वैध त्रुटि के साथ दो त्रुटि संदेशों को परिभाषित नहीं कर सकते हैं संदेश:

http://www.primefaces.org/docs/vdl/3.4/primefaces-p/inputText.html

+0

धन्यवाद, मैं केवल \t जोड़ता हूं zedtimi

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