2014-04-16 3 views
5

प्रपत्र मैं संभाल करने के लिए है कुछ इस तरह है:कैसे Playframework स्केला के साथ एक सरणी प्रपत्र क्षेत्र बाध्य करने के लिए

<label for="features_1"> 
    <input type="checkbox" id="features_1" name="features[]" value="4"> foo 
</label> 
<label for="features_2"> 
    <input type="checkbox" id="features_2" name="features[]" value="8"> bar 
</label> 

मैं इस

request.body.asFormUrlEncoded.get("features[]") 

जैसी सरणी प्राप्त कर सकते हैं जो मुझे जब दोनों देता है आइटम List(4, 8)

चयनित लेकिन कर रहे हैं जब मैं एक के रूप में इस बाध्य करने के लिए कोशिश

case class MyFeatures(features: Seq[Long]) 

val myForm = Form (
    mapping(
     "features" -> seq(longNumber) 
    )(MyFeatures.apply)(MyFeatures.unapply) 
) 

मैं हमेशा एक खाली अनुक्रम मिलता है, "सुविधाओं []"

संपादित

ऊपर के उदाहरण वास्तव में काम करता है के साथ एक ही मुद्दे कहीं और था। सुविधा के लिए बाध्यकारी खेलने सुविधाओं तब्दील [0] = 4 और सुविधाओं [1] = 8 जो तब seq (...) या सूची (...) मैपिंग में सही ढंग से नियंत्रित किया जाता है

+1

आप की तरह कैसे आप से अनुरोध प्रपत्र बाँध आसपास के कोड, का एक सा अधिक दिखा सकते हैं। इसके अलावा, क्या मेरेफॉर्म पर कोई लागू/अनुपयोगी कार्य नहीं है? –

+0

ठीक है, कुछ बाध्य है, फॉर्म के अनुसार बाध्य कोड नाम [] मानों को नाम [0], नाम [1] में विस्तारित किया जाना चाहिए ... मुझे इसे और अधिक डीबग करना होगा। https://github.com/playframework/playframework/blob/2.2.x/framework/src/play/src/main/scala/play/api/data/Form.scala#L90 – Somatik

+0

ठीक है, मेरी समस्या पूरी तरह से कहीं और थी , मेरे फॉर्म में गलत फ़ील्ड नाम का उपयोग करके, प्रदान किया गया उदाहरण वास्तव में काम करता है – Somatik

उत्तर

6

प्रयास करें:

<label for="features_1"> 
    <input type="checkbox" id="features_1" name="features[0]" value="4"> foo 
</label> 
<label for="features_2"> 
    <input type="checkbox" id="features_2" name="features[1]" value="8"> bar 
</label> 

संपादित

या:

myForm.bind(myForm.bindFromRequest.data + ("features"-> request.body.asFormUrlEncoded.get("features[]"))).fold(
... 
) 

यह सीधे अनुरोध से अन्य सभी क्षेत्रों के लिए बाध्य होगा, और फिर जब यह सुविधाओं की बात आती है, वे जाने जाते हैं मैन्युअल रूप से जोड़ा जा रहा है। आप तो अधिक डेटा बाध्य करने की जरूरत नहीं है, तो बस लिखें:

myForm.bind("features"-> request.body.asFormUrlEncoded.get("features[]")).fold(
... 
) 
+0

प्रस्ताव के लिए धन्यवाद लेकिन मेरे पास फॉर्म निर्माण पर कोई नियंत्रण नहीं है और चूंकि नाटक में यह इनपुट लगता है चेकबॉक्स समूह मुझे लगता है कि इसे ठीक करने के लिए कुछ तरीका होना चाहिए बैकएंड पक्ष – Somatik

+0

मेरे संपादन में जोड़े गए सुझाव का उपयोग करके अपना फॉर्म बांधने का प्रयास करें। – Peter

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