1

私はプレイフレームワークが初めてで、サーバーへの簡単な投稿をしようとしています。私のルートでは、次のように設定しました。

POST    /Hello/add          controllers.Hello.add(name)

私の Hello.java クラスでは、次のように設定しました。

public class Hello extends Controller {
    public static Result add(String name){
        //add code
    }
}

そして私のhtmlファイルで:

<form action="Hello/add" method="post">
    <input type="text" name="name" />
    <input type="submit" value="Add" />
</form>

しかし、「追加」ボタンをクリックすると、次の例外が起動されます。

For request 'POST /Hello/add' [Missing parameter: name]

誰かが理由を知っていますか?

4

3 に答える 3

4

アクションでDynamicFormを使用する必要があり、ルート ファイルでパラメーターを指定しないでください。

ルート:

POST    /Hello/add          controllers.Hello.add()

コントローラーとアクション:

public class Hello extends Controller {
    public static Result add(){
        DynamicForm requestData = form().bindFromRequest();
        String name = requestData.get("name");
        // do what you want with the name variable
    }
}
于 2012-07-23T07:30:32.983 に答える
3

バインドが機能するために、ルート ファイルのメソッド シグネチャに name パラメーターを指定する必要はありません。

ルートファイルでは、ルートパターンで指定していないため、名前パラメーターがどこから来たのかわかりません

于 2012-07-23T06:23:13.200 に答える
0

前述のように、フォーム データがモデルに関連しない場合は、DynamicForm を使用する必要がありますただし、モデルに関連する場合 (通常の場合)、次のようにします。

public class Hello extends Controller {
    public static Result add(){
        Form<MyObject> inputObject = form(MyObject.class).bindFromRequest();
        // do what you want with the prefilled object
        // object is accessible through inputObject.get()
        // often you'd just inputObject.get().save();
    }
}

ここで MyObject は Model を拡張します。

ただし、パラメーターのないルートがまだあるため、これが適用されます。

POST    /Hello/add          controllers.Hello.add()
于 2012-08-03T13:57:52.410 に答える