eti*_*iau 6 validation playframework
在play框架文档中,有两种不同的方法来处理带有验证错误的操作:
if (validation.hasErrors()) {
params.flash(); // add http parameters to the flash scope
validation.keep(); // keep the errors for the next request
index();
}
Run Code Online (Sandbox Code Playgroud)
if (validation.hasErrors()) {
render("@form", post);
}
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么 ?渲染还是重定向?
两种方法都有利弊.
我个人的偏好是使用重定向方法,原因是浏览器URL正确地指出了您在应用程序中的位置.例如,如果您的索引页面调用登录操作,如果您不使用重定向,那么当您实际在索引页面上有错误时,浏览器URL将显示登录.
但是,这种方法存在问题.要实现重定向并保留验证错误消息,您需要使用validation.keep()
和params.flash()
(请参阅此处的详细信息),以便为下一个请求保留验证错误.这是在幕后通过将验证错误和用户输入的参数存储在Cookie中来实现的(以确保Play保持无状态).您可能已经知道,HTTP规范将Cookie限制为4Kb,因此如果您输入的数据大于4Kb(这对于您输入大块文本的表单可能是这样),那么您的Cookie将会溢出,你会丢失数据.
Play使用的原始方法是重定向方法,但由于Cookie限制,第二种方法作为解决方法专门添加到文档中.
第三种,也可能是更清洁的选择是使用javascript从客户端执行验证,该javascript使用AJAX来调用某些服务器端逻辑.在samples-and-test/validation
样本申请的第10个例子中可以看到这样的样本.