Top / GoogleAppEngine / Slim3 / バリデーション

たとえば

<textarea name="summary" ></textarea>

このテキストエリアに対して「必須項目である」というバリデーションをすることを考えます。

バリデーションのしくみ

Slim3のサーバサイドのバリデーションは、Controllerクラス内で

Validators の public boolean validate();

メソッドを呼びだすことで行います。

といっても単純で、

@Override
public Navigation run() throws Exception {
  //なんか処理
  if (validate()) {
    // バリデーションチェックOKの場合、業務ロジック
    return forward("/index");
  } else {
    // チェックNGの場合、元の画面へ戻る
    return forward("/input.jsp");
  }
}
private boolean validate() {
  if (!isPost()) {
    return false;
  }
  Validators v = new Validators(re quest);
  v.add("summary", v.required()); 
  v.add("author", v.required()); 
//    v.add("reportDateStr", 
//      v.required(), 
//      v.dateType("yyyy/MM/dd"), 
//      v.regexp("^\\d{4}/\\d{2}/\\ d{2}$"));
  return v.validate(); 
}

などのようにValidatorsクラスに、どのフィールドをどのようなタイプのチェックを行うかを指定するだけです。

ロジック側は以上であとはView側です。JSPでは、

<textarea name="summary" >${f:h(summary)}</textarea> ${f:h(errors.summary)}

のように指定すればOKです。summaryというフィールドのバリデーションチェックエラー時は、errors.summaryという変数にエラーメッセージが格納されます。

結果は、以下の通りとなります。

<textarea name="summary" ></textarea> summaryは必須です。

エラーをいっぺんに表示する

先ほど

 ${f:h(errors.summary)}

のようにフィールド名指定でエラー出力を行いましたが、発生したエラーをいっぺんに表示するには以下のようにします。

<ul>
 <c:forEach var="e" items="${f:errors()}">
   <li>${f:h(e)}</li>
 </c:forEach>
</ul>

エラー時のみCSSで装飾する

エラー時のみ、エラー用のスタイルシートを適用したい、なんてことがありますが、以下のようにすればよいです。

<textarea name="summary" class="${f:errorClass('summary', 'error')}">${f:h(summary)}</textarea>

summaryフィールドがエラーになったとき、"error"というスタイルシートを適用します。ようするに

<textarea name="summary" class="error"></textarea>

となります。エラーでない場合は

<textarea name="summary" class=""></textarea>

となります。

関連リンク


この記事は

選択肢 投票
おもしろかった 1  
そうでもない 0  

Top / GoogleAppEngine / Slim3 / バリデーション

現在のアクセス:2665


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-05-22 (火) 02:38:43 (2651d)