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(request);
       v.add("summary", v.required());
       v.add("author", v.required());
       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>

となります。

関連リンク


この記事は

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

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

現在のアクセス:3556


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS