1

以下のようなプレイ検証アノテーションとモルフィアアノテーションでフィールドにアノテーションが付けられた単純な User モデルがあります。

import play.data.validation.*;
import play.modules.morphia.Model;
import com.google.code.morphia.annotations.*;

@Entity
public class User extends Model{

    @Id
    @Indexed(name="USERID", unique=true)
    public ObjectId userId;

    @Required public String userName;


    @Email
    @Indexed(name="USEREMAIL", unique=true) 
    @Required public String userEmail;  
}

これで、データの永続化を担当する CreateNewUser メソッドを持つサービスができました。dao サポートに Morphia プラグインを使用しました。しかし、問題は、userName または userEmail が NULL であっても、ユーザー ドキュメントが mongo-db に永続化されることです。また、@Email の検証は行われません

// Below code is in app/controllers/Application.java
User a = new User();
a.userName = "user1";
// calling bean to create user, userService is in app/service/UserService
userService.createNewUser(a);

@valid と validation.hasErrors() チェックを追加しても機能しません。以下のコードは app/service/UserService にあります

public void createNewUser(@Valid User user) {
        if (Validation.hasErrors()) {
              System.out.println("has errors");
            }   else {
            // TODO Auto-generated method stub
              userDao.save(user);
        }
}
4

1 に答える 1

1

createNewUser はアクションではないことがわかりました。したがって、オブジェクトの検証を強制できます。

public void createNewUser(User user) {
    final Validation.ValidationResult validationResult = validation.valid(user);
    if (validationResult.ok) {
        userDao.save(user);
    }   else {
        System.out.println("has errors");
    }
}

API: http://www.playframework.org/documentation/api/1.2.5/play/data/validation/Validation.html

古い答え

オブジェクトを検証するための注釈を忘れたため、フォームにエラーがないかどうかを確認する必要があります。

public void createNewUser(@Valid User user) {
     if(validation.hasErrors()) ...

ソース: http://www.playframework.org/documentation/1.2.5/validation#objects

于 2012-10-16T19:43:21.270 に答える