java - 玩! - 独特的模型领域

标签 java validation playframework

如何使我的模型类字段独一无二?例如。如果已经登录,我想为用户显示正确的消息。我必须自己编写验证检查并使用它,或者可以使用 JPA @UniqueConstraint

最佳答案

我是这样做的:

@Entity
public class User extends Model {

    @Basic(optional=false) @Column(unique=true) public String name;

    public User(String name) {
        this.name = name;
        create();
    }

    /** used in registration to find name clash */
    public static User findByName(String name) {
        return find("name", name).first();
    }

}

然后在 Controller 中执行如下操作:

public static void register(@Required String name) {
    if(User.findByName(name)!=null) {
        Validation.addError("name", "this name is not available");
    }
    if (validation.hasErrors()) {
        validation.keep();
        params.flash();
        flash.error("Please correct the form data.");
        signup(); // whatever your GET action was
    }

    User user = new User(name);
    login(); // whatever your success action is
}

您可以在没有 User.findByName() 检查的情况下执行此操作,并且您会得到一个 ConstrainViolationException 但这当然不是很用户友好。您也可以尝试/捕获该异常。我更喜欢这两种方式,即用户友好且在数据库中保持一致。

关于java - 玩! - 独特的模型领域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6179598/

相关文章:

java - AggregateItemReader 的位置和用例

java - JTable 为自定义类设置默认编辑器

angularjs - 如何在 Angular Material 的 md-autocomplete 组件中禁止自由文本?

java - 如何为 Play 框架配置 travis.yml?

scala - 在 ScalaTest 中注入(inject) PlaySlick 数据库连接

java - 在 Play 框架中使用 Json

java - 实现应用程序的只读版本

java - 从另一个方法传递数组作为参数

php - Laravel 自定义验证规则

android - 限制可在 android EditText View 中输入的字数的好方法是什么?