【问题标题】:Multi page form data validation in Play Framework?Play Framework中的多页表单数据验证?
【发布时间】:2015-06-04 23:22:02
【问题描述】:

我是java play框架的初学者。我正在构建一个应用程序,它将采用分散在多个页面中的表单数据,例如 4 到 5 页。但是所有数据都映射到同一个模型。如何获取用户每页上传的数据,验证模型的约束,最后将整个数据保存在模型中。

例如:- 如果第 1 页有必填的姓名字段,第 2 页有必填的爱好字段。那么我如何专门验证填充在该特定页面中的数据,导航到最后一页,并将所有数据保存在模型中,最后一页中。

模型将有 60-70 个字段。

我正在使用休眠 ORM。

谢谢!

【问题讨论】:

    标签: forms hibernate validation model-view-controller playframework-2.0


    【解决方案1】:

    您可以使用上一个表单的值预填充下一个表单,将它们保存在数据库中,转到下一个表单,从值中加载输入的值并预填充下一个表单等等。为此,请在控制器中使用一种方法:

    public static Result fillOutForm1(){
     Hobby form1 = new Hobby("sitting still", "diabetes");
     Form<Hobby > preFilledForm = newHobbyForm.fill(form1);
     return ok(views.html.YOURVIEWCLASS.render(preFilledForm);
    }
    

    通过这个,您可以通过表单将一些值“发送”到第一个视图类。在那里,用户回答更多字段并点击Submit。 因此,您需要一条返回控制器的路由,以处理 routes.conf 中的新输入:

    GET     /Form1              controllers.Application.fillOutForm1()
    POST    /Form1              controllers.Application.sendForm1()
    

    这是在你的控制器类中:

    public static Result sendForm1(){
            Form<Hobby> boundHobby = newHobbyForm.bindFromRequest();
            Hobby newHobby = boundHobby.get();
            //In your hobby class you need a finder implementation, so that you can interact with the database. With save() you put it into the database. This may be different for the database you use!
            newHobby.save();
    
            return redirect(routes.Application.index());
    }
    

    然后您可以不重定向到索引,而是使用下一个表单重定向到下一个视图类,然后从数据库中获取您的最后一个答案,再次预填充它们并将它们放入表单中。根据需要经常执行此操作。

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      相关资源
      最近更新 更多