たとえば <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> となります。 関連リンク †この記事は 現在のアクセス:3362 |