たとえば
<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>
エラー時のみ、エラー用のスタイルシートを適用したい、なんてことがありますが、以下のようにすればよいです。
<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>
となります。
この記事は
現在のアクセス:3556