2012-12-22 14 views
7

मैं प्ले फ्रेमवर्क 2 में फ़ील्ड कन्स्ट्रक्टर के बाहर किसी फॉर्म फ़ील्ड के लिए सत्यापन त्रुटि कैसे दिखा सकता हूं? यहाँ मैं क्या करने की कोशिश की है:प्ले फ्रेमवर्क 2 में फ़ील्ड कन्स्ट्रक्टर के बाहर सत्यापन त्रुटि को मुद्रित करने के लिए कैसे करें

@eventForm.("name").error.message 

और मैं इस त्रुटि मिलती है:

value message is not a member of Option[play.api.data.FormError] 

मैं उलझन में हूं, क्योंकि api docs में यह कहता है कि संदेश FormError का एक सदस्य है। इसके अलावा इस वैश्विक त्रुटियों के लिए ठीक काम करता है:

@eventForm.globalError.message 

उत्तर

7

आप की जाँच Form's sourcecode here

Form को परिभाषित करता है एक तरीका लागू इसके बारे में एक बेहतर समझ प्राप्त कर सकते हैं:

def apply(key: String): Field = Field(
    this, 
    key, 
    constraints.get(key).getOrElse(Nil), 
    formats.get(key), 
    errors.collect { case e if e.key == key => e }, 
    data.get(key)) 

के रूप में दस्तावेज़ में कहा, यही कारण है, किसी भी क्षेत्र देता है, भले ही यह अस्तित्व में नहीं है । और एक Field एक errors सदस्य जो एक Seq[FormError] देता है:

तो, आप (Seq[FormError] के लिए) ऐसा ही कुछ कर सकता है:

eventForm("name").errors.foreach { error => 
    <div>@error.message</div> 
} 

या (के लिए Option[FormError])

eventForm("name").error.map { error => 
    <div>@error.message</div> 
} 

या, आप Formerrors:

का उपयोग कर सकते हैं 0

और किसी दिए गए कुंजी की सभी त्रुटियां प्राप्त करें। इस (Seq[FormError] के लिए) की तरह:

eventForm.errors("name").foreach { error => 
     <div>@error.message</div> 
} 

या (Option[FormError] के लिए)

eventForm.error("name").map { error => 
      <div>@error.message</div> 
} 

आपको और अधिक जानकारी चाहते हैं, स्रोत कोड की जाँच करें। यह अच्छी तरह से लिखा है और अच्छी तरह से टिप्पणी की है।

चीयर्स!

संपादित करें:

रूप biesior टिप्पणी की: अलग-अलग भाषाओं के साथ मानव पठनीय सुंदर संदेश दिखाने के लिए आप कैसे खेलने I18N बाहर काम करता है here

पूरी तरह से आप शायद करने के लिए जा रहे हैं होना करने के लिए जाँच करने के लिए है I18N के साथ सौदा। यह सब काम करने के लिए मुश्किल नहीं है। documentation पढ़ने के बाद भी आप स्वयं को थोड़ा सा दूषित कर सकते हैं। मैं आपको थोड़ा धक्का दूंगा।messages फ़ाइल को अपने conf फ़ोल्डर में जोड़ें और आप इसकी सामग्री को here से कॉपी कर सकते हैं। इस तरह आप डिफ़ॉल्ट संदेशों पर अधिक नियंत्रण रखेंगे। यदि error.messageerror.invalid थे यह संदेश पहले conf/messages फ़ाइल Invalid value में परिभाषित दिखाना चाहते

eventForm.errors("name").foreach { error => 
      <div>@Messages(error.message, error.args: _*)</div> 
} 

उदाहरण के लिए,: अब, अपने दृश्य में, आप ऐसा कुछ करने के लिए सक्षम होना चाहिए। args कुछ तर्क परिभाषित करें कि आपका त्रुटि संदेश संभाल सकता है। उदाहरण के लिए, यदि आप error.min को संभालने वाले थे, तो arg न्यूनतम मान आवश्यक हो सकता है। आपके संदेश में आपको केवल {n} पैटर्न का पालन करना होगा, जहां n आपके तर्क का आदेश है।

बेशक

, आप ऐसा अपने स्वयं के संदेशों परिभाषित कर सकते है:

error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler! 

और अपने नियंत्रक में आप अपने प्रपत्र की जांच कर सकता है जैसे कि (सिर्फ एक कोड की पंक्ति आप इसे की भावना को दिखाने के लिए)

"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year 

यदि आप भाषाओं के साथ खेलना चाहते हैं, तो बस दस्तावेज़ों का पालन करें।

चीयर्स, फिर से!

+1

बस पाठ्यक्रम की नोक, मानव पठनीय संदेश प्रदर्शित करने के लिए यह ''

@Messages(error.message)
बजाय ''
@error.message
biesior

+0

यीप, I18N एक और कहानी – wleao

+0

तो मुझे लगता है कि मैं वास्तव में खेलने का उपयोग करने के स्केला सीखने की जरूरत है के रूप में इस्तेमाल किया जाना चाहिए। wleao, आपके उदाहरण काम किया। एक मानव पठनीय संदेश प्राप्त करने के लिए मुझे @Messages (error.message) का उपयोग करने की आवश्यकता थी, जैसा कि biesior ने कहा था। – Brian

3

के रूप में आप अपने आप को कहा, messageFormError का एक सदस्य है, लेकिन आप एक Option[FormError] है। आप

eventForm("name").error.map(_.message).getOrElse("") 

है कि आप संदेश देता है, यदि कोई त्रुटि होती है, और "" इस्तेमाल कर सकते हैं, अगर वहाँ नहीं है।

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