【问题标题】: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());
}
然后您可以不重定向到索引,而是使用下一个表单重定向到下一个视图类,然后从数据库中获取您的最后一个答案,再次预填充它们并将它们放入表单中。根据需要经常执行此操作。