2012-07-23 179 views
1

我是新玩家框架,我试图做一个简单的职位到服务器。 在我的路线我设置:缺少参数错误

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

在我Hello.java I类设置:

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

您的操作使用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 
    } 
} 
+0

是不是有另一种方式?玩不做? – MuriloKunze 2012-07-24 00:19:15

+0

不是我所知道的。 – 2012-07-24 05:00:27

+0

form()现在已被弃用。改用FormFactory。 http://stackoverflow.com/questions/36099834/the-method-formclasst-from-form-class-is-deprecated-in-play-framework – kamalkishor1991 2016-07-23 20:37:58

3

您不必在路径文件中的方法签名中提供名称参数,以使绑定生效。

在路由文件,玩不明白名字的参数从哪儿来,你没有在路由模式指定它

+0

我没有得到它。我试图删除参数路径的文件,但其他错误ocurrs:对于没有足够的论据方法add:(name:java.lang.String)play.mvc.Result。 – MuriloKunze 2012-07-24 00:16:54

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扩展模型。

你最好还是有,虽然没有参数的路线,所以适用:

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