验证是否可以与控制器中增强的参数一起使用?

时间:2011-11-20 09:14:59

标签: java validation playframework

我有一个网站模型,它具有@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);
    }
}

1 个答案:

答案 0 :(得分:1)

如果您的应用用户对其没有影响,我不确定是否有必要将User声明为@Required。嗯,这是你自己代码的安全网。

但是,由于当您提交网站表单时用户不在参数中,您必须手动验证:

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