2010年1月3日日曜日

OValでバリデーション用メソッドを作成

スズキです。

OValでは、アノテーションで、バリデートするメソッドを指定することができます。
http://oval.sourceforge.net/userguide.html#d4e481
> You can write a method within the class that has a single parameter to receive the value
> to validate and that returns true if the constraint is satisfied and false if it is violated.

具体的には下記のように書けます。

(1) 引数が一つ(バリデーションする値が代入)で、
戻り値がboolean(OK: true, NG: false)のメソッドを作成します。

(2) 対象のフィールドに@ValidateWithMethodをつけ、
methodNameに(1)で作成したメソッドを指定し、
parameterTypeにその引数の型を指定します。

--------【IndexJson.java】--------
...
public static class IndexForm {

  @NotBlank
  @AssertURL
  @ValidateWithMethod(methodName="isUniqueUrl", parameterType=String.class)
  public String url;

  @SuppressWarnings("unused")
  private static boolean isUniqueUrl(String url) {
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query("feed");
    query.setKeysOnly().addFilter("url", FilterOperator.EQUAL, new Link(url));
    if(datastore.prepare(query).countEntities() == 0) {
      return true;
    } else {
      return false;
    }
  }

}
...
--------
http://code.google.com/p/suz-lab-gae/source/browse/trunk/suz-lab-feed/src/suz/lab/feed/page/other/mypage/IndexJson.java?r=98

上記では、入力されたURLに対して、
すでにDatastore(Kind=feed)に登録されてないかチェックしています。

Datastore内のユニークチェックは独自アノテーションにしよう。

--------
http://www.suz-lab.com

0 コメント: