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

您必须在 Action 中使用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 参数即可使绑定生效。

在路由文件中,play 不明白 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 回答