5

मुझे Play में दिलचस्प चीज़ मिली है! ढांचे के सत्यापन के रूप में। उदाहरण के लिए मैं ऐसे रूप है:स्कैला प्ले फॉर्म सत्यापन: आवश्यक बूलियन अनिवार्य नहीं है

case class Foo(mystring: String, myint: Int, mybool: Boolean) { // doing cool stuff here } 
val myForm = Form(
    mapping(
     "mystring" -> text, 
     "myint" -> number, 
     "mybool" -> boolean 
)(Foo.apply)(Foo.unapply)) 

जब मैं "mybool" मेरे Json, मान्यता गुजरता में मौजूद बिना डेटा बाइंडिंग रहा हूँ और "mybool = false" के साथ एक वस्तु बनाता है। यह काफी अजीब व्यवहार है, जैसे कि मैं एक ही डेटा पास करूंगा, लेकिन "mystring" फ़ील्ड के बिना मुझे Validation Errors: Map(mystring -> error.required) मिलेगा जो मुझे देखने की उम्मीद है - क्योंकि फ़ील्ड गुम है।

मैं बूलियन फ़ील्ड वैकल्पिक बना रही हूँ, लेकिन मैं मैन्युअल रूप से इस तरह के जांच जोड़ रहा है:

Validation Errors: Map(mybool -> mybool.required) 
: क्षेत्र मैं उम्मीद त्रुटि मिल रही है बिना

"mybool" -> optional(boolean).verifying("mybool.required", _.isDefined) 

और डेटा बाँध

उदाहरण डेटा सेट:

{ 
    "mystring": "stringHere", 
    "myint": 33 
} 

क्यों आवश्यक जांच बूलियन के लिए काम नहीं करता है? इसके लिए सबसे अच्छा कामकाज क्या है? क्या यह एक खेल है! बग या मैं बस कुछ समझ में नहीं आता?

आपके उत्तरों के लिए धन्यवाद।

उत्तर

3

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

+1

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

+0

यदि आपको सबसे ज्यादा आवश्यकता होती है तो मुझे प्ले के फॉर्म का उपयोग करने में कोई समस्या नहीं दिखाई देती है चाहे डेटा फॉर्म जमा करने या एपीआई अनुरोध के रूप में आ रहा हो। मुझे कहना चाहिए कि मैं स्कैला से बहुत परिचित नहीं हूं इसलिए आप जो चाहते हैं उसे करने के कुछ अंतर्निहित तरीके हो सकते हैं, लेकिन कभी-कभी अपना स्वयं का कस्टम सत्यापन करना आवश्यक है। – estmatic

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