[英]Play Framework: How to validate a subset of fields in an object?
我有一个具有许多属性的User对象。 在我的编辑个人资料屏幕中,我正在显示这些属性的子集。 在相应的控制器操作中,如何仅验证正在编辑的字段而不验证User对象中的所有字段?
我已使用MaxSize,Email,URL等约束注释User对象中的字段,并且不希望通过手动验证每个字段再次重复它们。
任何指针都将非常感激。 谢谢!
最简单的方法是将完整对象传递给接收方法,然后只验证所有对象。 由于您只编辑字段的子集,因此它们将是唯一更改的字段,以及在验证失败时将触发错误的字段。 当然,这是假设您从未在数据库中存储无效对象!
如果没有,您还可以使用验证标记创建不从Model扩展的支持bean,并将其传递给表单和控制器。 就像是:
public class SupportBean {
@Email
public String mail;
@Max(3)
public int size;
//etc, add getters and setters as I'm not sure if it is required.
}
在这两种情况下,它都是这样的,如果需要,用一个临时对象替换完整对象User(仔细检查代码,我这里没有Play环境,我可能会做一些错别字/小错误)
*{ assuming parameter 'user' is passed in the render method that creates this view }*
#{form @controller.save()}
#{field 'user.name'}
<p>
<label>&{field.name}</label>
<input type="text" id="${field.id}" name="${field.name}" value="${field.value}" class="${field.errorClass}">
<span class="error">${field.error}</span>
</p>
#{/field}
*{ add more field the same way }*
#{/form}
然后在控制器中:
*{ we tag required for validation }*
public static void save(@Valid User user) {
checkAuthenticity();
if(validation.hasErrors()){
//there are errors, add to flash and redirect to edit page
} else {
user.save();
//redirect
}
}
添加POST规则以“保存”int路由文件,您就可以开始了。
该框架有一个示例项目( 验证我认为它的名称),它包含7种不同的验证方法。 最后一个使用JQuery重用类的验证标记,并在提交之前在客户端中运行相同的验证。 给他们看看,他们可能会帮助你很多:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.