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

时间:2011-05-12 04:33:40

标签: java playframework

我有一个具有许多属性的User对象。在我的编辑个人资料屏幕中,我正在显示这些属性的子集。在相应的控制器操作中,如何仅验证正在编辑的字段而不验证User对象中的所有字段?

我已使用MaxSize,Email,URL等约束对User对象中的字段进行了注释,并且不希望通过手动验证每个字段再次重复它们。

任何指针都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

最简单的方法是将完整对象传递给接收方法,然后只验证所有对象。由于您只编辑字段的子集,因此它们将是唯一更改的字段,以及在验证失败时将触发错误的字段。当然,这是假设您从未在数据库中存储无效对象!

如果没有,您还可以使用验证标记创建不从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规则“保存”,然后就可以开始了。

该框架有一个示例项目( validation 我认为它的名称),它包含7种不同的验证方法。最后一个使用JQuery重用类的验证标记,并在提交之前在客户端中运行相同的验证。给他们看看,他们可能会帮助你很多:))