2012-07-23 176 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()