我有一个网站模型,它具有@Required User owner
属性。此属性在控制器方法内填充。但是,在进入控制器方法时会检查验证,因此它认为对象无效(因为当时它是)。
应该玩!验证是否用于此目的?
我应该放弃@Valid注释并使用validation.required(website)
手动检查吗?
更新 - 使用validation.required(website)
仅验证网站不为空,但它不会运行验证网站上的任何注释。如果我没有使用@Valid参数注释,这是否意味着我不能在模型本身上使用基于注释的验证?什么是程序员要做的?
Update2 - 我似乎应该拨打validation.valid(website)
而不是validation.required(website)
。我还在@Required
方法参数(而不是@Valid)中添加了add()
注释。这是应该做的吗?
@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);
}
}
答案 0 :(得分:1)
如果您的应用用户对其没有影响,我不确定是否有必要将User声明为@Required。嗯,这是你自己代码的安全网。
但是,由于当您提交网站表单时用户不在参数中,您必须手动验证:
website.owner = getUser();
validation.valid(website);
...