如何将表单字段绑定到play框架中的特定提交按钮? (POST请求的表单)

时间:2018-02-09 14:38:39

标签: forms scala playframework http-post view-helpers

基本上我想在我的视图html模板中有两个按钮,并根据点击的按钮在我的表单中评估POST参数的Int参数。

如果点击了按钮编号1,我希望我的numParam为1

如果点击了按钮编号-2,我希望我的numParam为2

控制器代码:

case class Data(textParam: Option[String], numParam: Option[Int])

val form = Form(
  mapping(
    "textParam" -> optional(text),
    "numParam" -> optional(number)
  )(Data.apply)(Data.unapply)

查看代码:

@helper.form(helper.CSRF(routes.MyController.display)) {
    @helper.inputText(form("paramA"))
    <input type="submit" value="I want numParam to be 1">
    <input type="submit" value="I want numParam to be 2">
}

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我不知道这是否可以直接使用Play,所以我建议添加一些客户端JS。

你能做什么:

  • 删除<input type="submit" ...>,因为它无法让您在提交前修改表单内容
  • 添加两个<button>而不是
  • 添加隐藏的输入numValue
  • 使用javascript(在本例中为jquery)设置单击其中一个按钮时隐藏输入的值
  • 使用javascript提交表单

这些方面的某些内容可能(警告:未经测试):

@helper.form(helper.CSRF(routes.MyController.display), 'id -> "myForm") {
    @helper.inputText(form("paramA"))
    <button id="submit_numValue1">I want numParam to be 1</button>
    <button id="submit_numValue2">I want numParam to be 2</button>
    <input type="hidden" id="hiddenNumValue" name="numValue" value="0">
}

<script>
  // add an `onclick` handler to first button
  $('#submit_numValue1').click(function() {
    // set hidden input to '1'
    $('#hiddenNumValue').val("1");
    // submit the form
    $('#myForm').submit();
  });

  // add an `onclick` handler to the second button
  $('#submit_numValue2').click(function() {
    // set hidden input to '2'
    $('#hiddenNumValue').val("2");
    // submit the form
    $('#myForm').submit();
  });
</script>

如上所述,这要求jquery是&#34;导入&#34;在客户端作为javascript库。

不能保证这是在Play中解决它的最惯用的方式,但this answer似乎表明这种方法至少并不罕见。