【问题标题】:Play Framework - Form not Binding to Nested TuplesPlay Framework - 表单未绑定到嵌套元组
【发布时间】:2015-01-16 01:23:20
【问题描述】:

我创建了一个表单来绑定数据表请求:

val datatableForm = Form(
  tuple(
    "draw" -> number,
    "start" -> number,
    "length" -> number,
    "search" -> tuple(
        "value" -> text,
        "regex" -> boolean
    ),
    "columns" -> seq(tuple(
        "data" -> number,
        "name" -> text,
        "orderable" -> boolean,
        "search" -> tuple(
            "value" -> text,
            "regex" -> boolean
        )
      )
    ),
    "order" -> seq(tuple(
        "column" -> number,
        "dir" -> text
      )
    )
  )
)

在我的请求中,我致电val form = datatableForm.bindFromRequest。这对于 drawstartlength 变量非常有效,但对于 searchcolumnsorder 变量则失败。例如,当我不使用嵌套元组时,我可以调用datatableForm.bindFromRequest.get,它会返回一个Some 对象,但是当我添加嵌套元组并调用get 时,它会返回一个None 对象。

从 datatables javascript 对象发送的数据是:

{
  "draw": 1,
  "columns": [
    {
      "data": 0,
      "name": "",
      "searchable": true,
      "orderable": true,
      "search": {
        "value": "",
        "regex": false
      }
    },
    {
      "data": 1,
      "name": "",
      "searchable": true,
      "orderable": true,
      "search": {
        "value": "",
        "regex": false
      }
    }
  ],
  "order": [
    {
      "column": 0,
      "dir": "asc"
    }
  ],
  "start": 0,
  "length": 10,
  "search": {
    "value": "",
    "regex": false
  }
}

这是请求正文中的数据:

Map(draw -> ArrayBuffer(1), columns[0][data] -> ArrayBuffer(0), columns[0][name] -> ArrayBuffer(), columns[0][searchable] -> ArrayBuffer(true), columns[0][orderable] -> ArrayBuffer(true), columns[0][search][value] -> ArrayBuffer(), columns[0][search][regex] -> ArrayBuffer(false), columns[1][data] -> ArrayBuffer(1), columns[1][name] -> ArrayBuffer(), columns[1][searchable] -> ArrayBuffer(true), columns[1][orderable] -> ArrayBuffer(true), columns[1][search][value] -> ArrayBuffer(), columns[1][search][regex] -> ArrayBuffer(false), order[0][column] -> ArrayBuffer(0), order[0][dir] -> ArrayBuffer(asc), start -> ArrayBuffer(0), length -> ArrayBuffer(10), search[value] -> ArrayBuffer(), search[regex] -> ArrayBuffer(false))

如何让表单绑定到嵌套元组?

【问题讨论】:

  • 你能用@form覆盖你的表格吗?
  • Play 是什么版本的?我用 2.3 进行了尝试,并使用 REST 客户端发送提供的 JSON 就像一个魅力。一切都正确绑定。
  • @DanielOlszewski 我正在使用 Play 2.3。您能否发布您的请求的内容以及有关它的更多详细信息?

标签: javascript scala playframework-2.0 datatables jquery-datatables


【解决方案1】:

我看到了同样的错误。问题是请求没有以json 发送。确保将contentType 设置为json

如果您使用的是 jQuery,文档位于 here,了解如何执行此操作。

基本上是这样的:

$.ajax({
  type: "POST",
  url: youUrl,
  data : data,
  contentType: "application/json"
});

【讨论】:

  • 这有助于感谢您,但是对于今天的数据表(使用 OP 似乎正在使用的服务器端处理),您还需要添加以下内容:"data": function ( d ) { return JSON.stringify( d ); } 以获得您期望的 Json在 POST 正文中
猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 2020-04-11
  • 2012-11-02
  • 2015-03-07
  • 2018-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多