在Play 2.0中使用常量值绑定表单域?

时间:2012-04-17 04:01:33

标签: forms scala binding playframework-2.0

我有一个包含多个字段的scala表单。表单中的字段映射到Java类的成员变量。我想将一个字段(比如userId)与一个值绑定(我不希望用户输入该字段的值。相反,我想将此作为参数传递给scala模板)。但是,我无法手动绑定表单域。任何帮助都非常感谢。

请参阅下面的示例以便于理解:

`@(itemForm: Form[Item], user: User)
 @import helper._
 @main("Item list") {
 @if(user != null) {
    @form(routes.Application.newItem()) {
    @itemForm("userId") = @user.id /**I want to bind the userId form field */
        @inputText(itemForm("title")) 
        @inputText(itemForm("description"))
        @inputText(itemForm("price"))
        <input type="submit" value="Create">
    }
}
}`

1 个答案:

答案 0 :(得分:1)

在这种情况下,最好将其作为action的参数传递(记得修改路由声明)

@form(routes.Application.newItem(user.id)){
   ....

你也可以使用常见的html

<input type="hidden" name="userId" value="@user.id" />

修改

验证操作。注意:在隐藏字段旁边的页面上显示错误没有意义,因此您不需要占位符来显示错误消息。您可以将VALID值传递给隐藏字段。向无法更改隐藏字段值的用户显示验证错误是不好的概念。

public static Result newItem(){
    Form<ItemModel> itemForm = form(ItemModel.class).bindFromRequest();
    if (itemForm.hasErrors(){
        return badRequest(newItemView.render(itemForm));
    }    
    itemForm.get().save();
    return ok("Your new item is saved...");
}