我是java play框架的初学者。我是一个构建一个应用程序,它将表格数据分布在多个页面,比如4到5页。但是所有数据都映射到同一个模型。如何获取用户每页上传的数据,根据模型的约束进行验证,最后在模型中保存整个数据。
例如: - 如果第1页的名称字段是必需的,则第2页具有所需的爱好字段。那么我怎样才能专门验证该特定页面中填充的数据,导航到最后一页,并在最后一页中保存模型中的所有数据。
模型将有60-70个字段。
我正在使用Hibernate ORM。
谢谢!
答案 0 :(得分:0)
您可以使用最后一个表单的值预填充下一个表单,将它们保存在数据库中,转到下一个表单,从值中加载输入的值并预填充下一个表单,依此类推。为此,请在控制器中使用方法:
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());
}
然后你不能重定向到索引,而是重定向到下一个表单的下一个视图类,并从db获得你的最后答案,再次预填充它们并将它们放入表单中。根据需要经常这样做。