我是Play框架中的新手,我正在尝试对服务器进行简单的发布。 在我的路线中,我设置了:
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]
有人知道为什么吗?
答案 0 :(得分: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
}
}
答案 1 :(得分:3)
您不必在路由文件的方法签名中提供name参数,以使绑定生效。
在路径文件中,play不理解name参数的来源,因为你没有在路由模式中指定它
答案 2 :(得分:0)
作为previously told,如果表单数据与模型无关,则需要使用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()