【问题标题】:Missing parameter error缺少参数错误
【发布时间】:2012-07-23 01:31:04
【问题描述】:

我是游戏框架的新手,我正在尝试向服务器发布一个简单的帖子。 在我设置的路线中:

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]

有人知道为什么吗?

【问题讨论】:

    标签: playframework playframework-2.0


    【解决方案1】:

    你必须在你的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
        }
    }
    

    【讨论】:

    【解决方案2】:

    您不必在路由文件中的方法签名中提供 name 参数即可使绑定生效。

    在路由文件中,由于你没有在路由模式中指定,所以play不明白name参数来自哪里

    【讨论】:

    • 我没听懂。我试图删除路由文件中的参数,但出现另一个错误:方法添加的参数不足:(名称:java.lang.String)play.mvc。结果。
    【解决方案3】:

    作为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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2012-03-04
      • 2020-09-09
      • 2019-10-25
      相关资源
      最近更新 更多