我有一个网站模型,它有一个@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);
}
}
的事情是我一种误解验证注释在任何时候都保持在实体是持久的,而它们更像是Controllers图层上的过滤器。我希望有一些方法可以在持久时间使用这些注释来实施验证规则。 现在虽然'validation.valid()'很好,谢谢。 – ripper234
他们都是,这就是为什么你可以使用相同的注释在控制器和模型内注释。 –
我的模型被注释了,但坏的对象仍然被保留。我刚刚看到这篇文章,如何确保这不会发生:https://groups.google.com/d/msg/play-framework/MofQCKoZ9RE/2gYrX3l5lOoJ – ripper234