如何使用Play Framework scala绑定数组表单字段

时间:2014-04-16 09:42:21

标签: forms scala binding playframework playframework-2.0

我必须处理的表格是这样的:

<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)
)

我总是得到一个空序列,与“features []”

相同

修改

以上示例实际上有效,问题出在其他地方。绑定播放时将要素转换为要素[0] = 4和要素[1] = 8,然后在seq(...)或列表(...)映射中正确处理

1 个答案:

答案 0 :(得分: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(
...
)