The form I have to handle has something like this:
<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>
I can get the array like this
request.body.asFormUrlEncoded.get("features[]")
which gives me when both items are selected List(4, 8)
But when I try to bind this in a form
case class MyFeatures(features: Seq[Long])
val myForm = Form (
mapping(
"features" -> seq(longNumber)
)(MyFeatures.apply)(MyFeatures.unapply)
)
I always get an empty sequence, same with "features[]"
EDIT
The above example actually works, the issue was somewhere else. Upon binding play translates the features to feature[0]=4 and features[1]=8 which is then handled correctly in the seq(...) or list(...) mappings
Try:
<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>
EDIT
Or:
myForm.bind(myForm.bindFromRequest.data + ("features"-> request.body.asFormUrlEncoded.get("features[]"))).fold(
...
)
This will bind all other fields from request directly, and then when it comes to features, they are going to be added manually. If you don't need to bind more data then just write:
myForm.bind("features"-> request.body.asFormUrlEncoded.get("features[]")).fold(
...
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With