我正在使用 PlayFramework 构建一个通过 Ajax 工作的注册用户表单(它从不刷新页面),我显然需要对其进行验证。我正在考虑两种实现客户端和服务器端验证的方法。
- 通过 Ajax 将表单数据发送到服务器端验证,如果数据有效,则将用户保存在数据库中,或者在数据无效时向前端发送错误消息。所有这些都是通过 ajax 发生的,无需刷新页面。 Pro:这样我没有实现任何客户端验证,但我得到了相同的效果。 控制:我无法为每种类型的无效数据显示特定的错误消息(必需,最小长度,电子邮件格式,...)
- 使用客户端验证(jQuery 验证插件)验证表单,然后如果它有效,它将数据发送到服务器端验证。从服务器端,如果它是有效的,它会注册用户,否则什么都不会发生(?)。优点:显示特定错误消息的非常简单的方法控制:我需要实现 2 次相同的验证逻辑
这些是我的考虑,但我不知道它们是否正确,或者是否有其他更好的方法。您认为最好的方法是什么?
问题:
第一种方法:是否可以从服务器验证发送特定的错误消息并使用 PlayFramework 在前端显示它们(无需从头开始编写所有验证规则)?
第二种方式:要实现服务器和端验证,我必须首先使用客户端验证来验证数据,然后传递给服务器?并且在浏览器上禁用了javascript:服务器端验证必须显示一些东西?(例如:值得注意的 Mediafire 没有这样做,我必须假设这是正确的)
编辑:这里是我用来通过 ajax 以 json 格式接收表单数据的代码:
控制器:
JsonNode json = request().body().asJson();
Form<User> userForm = User.form.bind(json);
if(userForm.hasErrors()) {
return badRequest("One or more inputs are invalid");
} else {
// register the user in the db
}
型号(用户):
@Required
public String email;
@Required @MinLength(8) @MaxLength(16)
public String password;
public static Form<User> form = Form.form(User.class);
事实上,它会为任何无效输入返回一条通用消息。我不能做的是:返回(使用 badRequest)特定的错误消息并在表单的每个输入下显示它们。