2016-05-26 18 views
0

私はプレイフレームワーク2.5を初めて使用しました。私はのJavaで再生を使用しています。通常HTMLフォームを作成し、にPOSTメソッドを使用してフォームを送信しますが、エラーが発生します。私はたくさんの検索を行ったが、成功しなかった。Play Framework 2.5 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 

私はPOSTメソッドを使用してリクエストを送信するために、通常のHTMLフォームを使用します。助けてください?

答えて

0

私は私の答えの解決策を持っています。

我々は

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

によってプレイフレームワーク2.5にフォームポストデータを取得し、その後でフォーム名パラメータ値を得ることができますしない理由

form_values.get("<key_name>")[0]; 
+1

それはまた私のために働いた。おかげさまでiNikkz。それは悪夢だった。 – vivmal

2

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クラスを(提出されたデータでプレイが記入される)を作成する必要があると思います

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の遊び説明書を参照)

関連する問題