2011-11-20 71 views
1

我有一个网站模型,它有一个@Required User owner属性。该属性在控制器方法内部被填充。但是,在进入控制器方法时检查验证,所以它认为对象是无效的(因为当时是这样)。可以将验证与控制器中增强的参数一起使用吗?

应该玩!验证是否用于此目的?

我应该放弃@Valid注释并使用validation.required(website)手动检查吗?

更新 - 使用validation.required(website)只验证网站不为空,但它不会运行验证网站上的任何注释。如果我没有使用@Valid参数注释,这是否意味着我不能在模型本身上使用基于注释的验证?什么是程序员要做的?

Update2 - 似乎我应该叫validation.valid(website)而不是validation.required(website)。我还为add()方法参数(而不是@Valid)添加了@Required注释。这是它应该完成的方式吗?

@Entity 
public class Website extends PortalModel { 
    @Required 
    public String url; 

    @Required 
    @ManyToOne 
    public User owner; 
} 

public class Sites extends UserAwareControllerBase { 
    public static void added(@Valid Website website) { 
     website.owner = getUser(); // from base class 

     if (Validation.hasErrors()) { 
      Validation.keep(); 
      params.flash(); 
      add(); 
     } 

     websiteRepo.save(website); 
     edit(website.id); 
    } 
} 

回答

1

我不知道是否有申报用户为@Required点,如果你的应用程序的用户都对它没有影响。那么,这是你自己的代码的安全网。

但由于用户是不是在当您提交的网站形式的参数,你必须手动验证:

website.owner = getUser(); 
validation.valid(website); 
... 
+0

的事情是我一种误解验证注释在任何时候都保持在实体是持久的,而它们更像是Controllers图层上的过滤器。我希望有一些方法可以在持久时间使用这些注释来实施验证规则。 现在虽然'validation.valid()'很好,谢谢。 – ripper234

+0

他们都是,这就是为什么你可以使用相同的注释在控制器和模型内注释。 –

+0

我的模型被注释了,但坏的对象仍然被保留。我刚刚看到这篇文章,如何确保这不会发生:https://groups.google.com/d/msg/play-framework/MofQCKoZ9RE/2gYrX3l5lOoJ – ripper234

相关问题