繁体   English   中英

Play Framework:如何验证对象中的字段子集?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM