2013-10-12 8 views
7

मैं स्कैला फॉर्म में टेक्स्ट की एक सीक बांधने की कोशिश कर रहा हूं। क्या मैं अब तक है निम्नलिखित कोड है:प्ले करें! स्कैला के साथ फ्रेमवर्क - फॉर्म सीक (टेक्स्ट) बाइंडिंग

val registerForm = Form[User](
mapping(
    "login" -> text, 
    "password" -> text, 
    "roles" -> seq(text) 
) { 
    (login, password, roles) => User(login = login, password = password, roles = roles) 
} { 
    user => Some((user.login, user.password, user.roles)) 
}) 

मेरे HTML प्रपत्र का चयन है:

<select id="roles" name="roles" multiple="multiple"> 
    <option value="ADMIN">Admin</option> 
    <option value="TESTER">Tester</option> 
</select> 

लॉग इन और पासवर्ड सही तरीके आबद्ध कर रहे हैं। मेरी समस्या यह है कि भूमिकाओं की सीमा हमेशा खाली होती है।

मैंने नियंत्रक विधि को पारित अनुरोध वस्तु में चेक किया है और (यदि चुना गया है) दोनों भूमिकाएं हैं - वे केवल फॉर्म ऑब्जेक्ट में सही ढंग से बाध्य नहीं हैं।

कोई भी विचार?

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

मैं भी नाटक के ढांचे Google समूह में मेरे सवाल (https://groups.google.com/forum/#!topic/play-framework/KcbiF9K3d8w) और प्राप्त जवाब वहां तैनात। समाधान एक नाम चुनना है: "भूमिकाएं" के बजाय "भूमिकाएं []"।

+2

आप उत्तर खंड में उत्तर पोस्ट और सही जवाब के रूप में चिह्नित कर सकते हैं ? –

उत्तर

4

यह पता लगाया।

समाधान एक नाम चुनना है: "भूमिकाएं" के बजाय "भूमिकाएं []"।

+0

वह वास्तव में अप्रत्याशित था .. धन्यवाद, एक आकर्षण की तरह काम करता है! – mulya

0

एक जावा प्ले multiple विशेषता के साथ एक select करने के लिए एक प्ले Form बंधन की 2.3.7 उदाहरण:

<select name="bar[]" multiple> 
     <option value="bar-1">Bar</option> 
     <option value="bar-2">Bar Bar</option> 
     <option value="bar-3">Bar Bar Bar</option> 
</select> 

एक Form के साथ:

public class FooForm { 
    public List<String> bar; 
} 

और Controller बाध्यकारी:

FooForm fooForm = Form.form(FooForm.class).bindFromRequest().get(); 
Logger.info(fooForm.bar.get(0)); 
Logger.info(fooForm.bar.get(1)); 

मैंने सरणी के साथ परीक्षण किया है (यानी। String[]) और यह केवल List<> के साथ काम करता है।

उम्मीद है कि इससे मदद मिलती है।


नोट: अजीब तरह, यह केवल काम करता है जब Form वर्ग (FooForm) नियंत्रक के रूप में एक ही पैकेज में है, या एक ही कक्षा और static में। यह एक बग प्रतीत होता है।

आप एक अलग पैकेज (यानी controllers.forms), तो आप अपने प्रपत्र वर्ग में getters और setters जरूरत उपयोग करना चाहते हैं:

public class FooForm { 
    private List<String> bar; 

    public List<String> getBar() { return bar; } 
    public void setBar(List<String> bar) { this.bar = bar; } 
} 
संबंधित मुद्दे