playframework ajax post - 将post params提取到DynamicForm

时间:2013-01-21 10:30:49

标签: ajax post parameters playframework dynamicform

我正在尝试使用DynamicForm提取发送ajaxly($ .ajax(...))的post params:

new DynamicForm().bindFromRequest()

我收到了这个错误:

Caused by: java.lang.RuntimeException: There is no HTTP Context available from here.
    at play.mvc.Http$Context.current(Http.java:27) ~[play_2.9.1.jar:2.0.4]
    at play.mvc.Controller.request(Controller.java:28) ~[play_2.9.1.jar:2.0.4]
    at play.data.Form.requestData(Form.java:87) ~[play_2.9.1.jar:2.0.4]
    at play.data.DynamicForm.bindFromRequest(DynamicForm.java:46) ~[play_2.9.1.jar:2.0.4]
    at controllers.Login$$anonfun$login$1.apply(Login.scala:19) ~[classes/:2.0.4]
    at controllers.Login$$anonfun$login$1.apply(Login.scala:18) ~[classes/:2.0.4]

如果我尝试使用映射的普通形式绑定params,它可以工作:

  val form = Form(
    tuple(
      "identity" -> nonEmptyText,
      "password" -> nonEmptyText,
      "loginType" -> nonEmptyText
    )
  )
  form.bindFromRequest

这对我的登录ajax帖子很有用。但对于其他ajax帖子,我仍然想使用DynamicForm并使用Map [String,String]。任何想法是什么问题?

1 个答案:

答案 0 :(得分:1)

我的开发团队和我有同样的问题。在我们的例子中,我们使用Java,java.util集合包和以下代码行将请求参数绑定到Map。

final Map<String, String[]> myForm = request().body().asFormUrlEncoded();

我不知道Scala,但我认为有一种方法可以在Scala中使用Java集合。