jjc*_*pek 2 java validation playframework
如何使我的模型类字段独一无二?例如.如果已经登录,我想为用户显示正确的消息.我必须编写自己的验证检查并使用它,或者@UniqueConstraint可以使用JPA 吗?
我这样做了:
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中执行以下操作:
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
}
Run Code Online (Sandbox Code Playgroud)
你可以在没有User.findByName()检查的情况下做到这一点,你会得到一个ConstrainViolationException但当然不是非常用户友好.您也可以尝试/捕获该异常.我更喜欢两种方式,用户友好且在数据库中保持一致.