Java 播放框架:如何验证对象中的字段子集?

Java 播放框架:如何验证对象中的字段子集?,java,playframework,Java,Playframework,我有一个用户对象,它有许多属性。在我的编辑配置文件屏幕中,我显示了这些属性的子集。在相应的控制器操作中,如何仅验证正在编辑的字段而不是用户对象中的所有字段 我已经用MaxSize、Email、URL等约束对用户对象中的字段进行了注释,不想通过手动验证每个字段来重复它们 任何指点都将不胜感激。谢谢 最简单的方法是将完整对象传递给接收方法,然后验证所有对象。由于您只编辑字段的一个子集,因此只有这些字段会发生更改,并且在验证失败时会触发错误。当然,这是假设您从不在数据库中存储无效对象 如果没有,您还可

我有一个用户对象,它有许多属性。在我的编辑配置文件屏幕中,我显示了这些属性的子集。在相应的控制器操作中,如何仅验证正在编辑的字段而不是用户对象中的所有字段

我已经用MaxSize、Email、URL等约束对用户对象中的字段进行了注释,不想通过手动验证每个字段来重复它们


任何指点都将不胜感激。谢谢

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

如果没有,您还可以创建一个不从模型扩展的支持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.
}
在这两种情况下都是这样的,如果需要的话,用临时对象替换完整的对象用户(仔细检查代码,我这里没有游戏环境,我可能会犯一些打字错误/小错误)

将POST规则添加到routes文件的“save”中,您就可以开始了


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

嗨,皮特,谢谢你的回答。我确实看过这些示例,但试图避免创建额外的类和重复验证规则。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
   }
}