- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#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;}