Play框架中的多页表单数据验证?

时间:2015-06-04 12:51:14

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

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

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

模型将有60-70个字段。

我正在使用Hibernate ORM。

谢谢!

1 个答案:

答案 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获得你的最后答案,再次预填充它们并将它们放入表单中。根据需要经常这样做。