【问题标题】:Play Framework 2.5 Form submit using POST method ErrorPlay Framework 2.5 使用POST方法提交表单错误
【发布时间】:2016-05-26 09:14:03
【问题描述】:

我是 Play Framework 2.5 的新手。我在 Java 中使用 Play。创建了一个普通的 HTML 表单并希望 使用 POST 方法提交表单,但它会引发错误。我用谷歌搜索了很多但没有成功。

路线:

POST     /output     controllers.HomeController.result

HTML 代码:

    <form name="form1" action="/output" method="post">
        <div id="content">
            <label>Enter Sentence/Paragraph.</label></br>
            <textarea id="para" name="para" rows="15" cols="100"></textarea></br>
            <input id="submit_btn" name="submit_btn" type="submit" value="Submit" />
        </div>
    </form>

控制器:

package controllers;

import com.google.inject.Inject;
import play.data.DynamicForm;
import play.data.FormFactory;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.index;
import views.html.output;.

public class HomeController extends Controller {

    @Inject
    FormFactory formFactory;

    public Result index() {
        return ok(index.render("NLP Pipeline."));
    }

    public Result result() {
        DynamicForm requestData = formFactory.form().bindFromRequest();
        System.out.println("form: " + requestData.get("para"));
        return ok();
    }

}

错误:

Unexpected exception
ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.NoSuchMethodError: org.springframework.util.ClassUtils.getMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
  at play.data.format.Formatters.<init>(Formatters.java:31)
  at play.data.format.FormattersModule.bindings(FormattersModule.java:18):
Binding(class play.data.format.Formatters to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating play.data.format.Formatters
    for parameter 1 at play.data.FormFactory.<init>(FormFactory.java:25)
  at play.data.FormFactoryModule.bindings(FormFactoryModule.java:17):
Binding(class play.data.FormFactory to self) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$1)
  while locating play.data.FormFactory
    for field at controllers.HomeController.formFactory(HomeController.java:16)
  while locating controllers.HomeController
    for parameter 1 at router.Routes.<init>(Routes.scala:32)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router
    for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200)
  while locating play.api.http.JavaCompatibleHttpRequestHandler
  while locating play.api.http.HttpRequestHandler
    for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221)
  at play.api.DefaultApplication.class(Application.scala:221)
  while locating play.api.DefaultApplication
  while locating play.api.Application

1 error

我想使用普通的 HTML 表单 使用 POST 方法提交请求。有什么帮助吗?

【问题讨论】:

    标签: java forms post playframework-2.5


    【解决方案1】:

    为什么不在 html 代码中简单地使用帮助器?使用

    @import helper._
    
    @form(my.controller.method.handling.post(param)) {
        <div id="content">
            <label>Enter Sentence/Paragraph.</label></br>
            <textarea id="para" name="para" rows="15" cols="100"></textarea></br>
            <input id="submit_btn" name="submit_btn" type="submit" value="Submit" />
        </div>
    }
    

    然后,在控制器中:

    final Form<MyObject> form = formFactory.form(MyObject.class).bindFromRequest();
    

    您只需要创建一个简单的表单 bean 类(由 Play 使用提交的数据填写):

    public class MyObject {
        private String para;
        public String getPara() { return para; }
        public void setPara(String para) { this.para = para; }
    }
    

    无需处理类型转换等即可更轻松地处理表单对象(请参阅https://www.playframework.com/documentation/2.5.x/JavaForms#Handling-form-submission 的播放文档)

    【讨论】:

      【解决方案2】:

      我有我的答案的解决方案。

      我们可以通过

      Play framework 2.5中得到post data的形式
      final Map<String, String[]> form_values = request().body().asFormUrlEncoded();
      

      然后通过:

      获取表单名参数值
      form_values.get("<key_name>")[0];
      

      【讨论】:

      • 它也对我有用。谢谢 iNikkz。这是一场噩梦。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2018-05-14
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多