// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

たとえば
 <textarea name="summary" ></textarea>
このテキストエリアに対して「必須項目である」というバリデーションをすることを考えます。

**バリデーションのしくみ [#e5a5c63c]
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は必須です。


**エラーをいっぺんに表示する [#wcf24243]
先ほど
  ${f:h(errors.summary)}
のようにフィールド名指定でエラー出力を行いましたが、発生したエラーをいっぺんに表示するには以下のようにします。
 <ul>
  <c:forEach var="e" items="${f:errors()}">
    <li>${f:h(e)}</li>
  </c:forEach>
 </ul>


**エラー時のみCSSで装飾する [#c42d8c8b]
エラー時のみ、エラー用のスタイルシートを適用したい、なんてことがありますが、以下のようにすればよいです。
 <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>
となります。




**関連リンク [#n6ad0cf5]
-[[バリデーション - Slim3 日本語サイト(非公式)>http://sites.google.com/site/slim3documentja/documents/slim3-controller/validation]]
-[[【slim3】日付型のvalidation【Struts】 - 炸裂!情熱の右フック!!>http://d.hatena.ne.jp/hageyahhoo/20100627/1277630301]]


----
この記事は
#vote(おもしろかった,そうでもない)
#vote(おもしろかった[1],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}



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