2014年1月2日木曜日

Teeda で バリデーションに指定した項目ではない項目の色を変更する

前回に続いて、Teedaネタです。今度は前後でフォームの分かれた郵便番号などにバリデーションを適用した際に両方のフォームの色を変えたいなど、バリデーションを指定した項目ではないフォームをバリデーションエラー時に変更する方法を紹介します。
まず、複数のフォームに分かれている項目に対してバリデーションを適用する際には、独自のバリデータを作成する必要があるのですが、その方法は前回の記事である、
Teedaでの複合項目のバリデーションをする
を確認してください。

独自バリデータを作成方法がわかったところで、本題の色変更の方法についてですが、バリデーションエラーとなったときに項目の色を変更したい場合には、リクエストマップの

org.seasar.teeda.extension.ExtensionConstants.TEEDA_EXTENSION_MESSAGE_CLIENTIDS

に色をしたい項目の項目名を指定することで実現できます。
下記にコード例を記します。
/**
* コンポーネントのClientIdをrequestMapに設定し、
* 画面表示時に項目の色が変更されるようにする
*
* @param context FacesContext
* @param component 項目のUIComponent
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private void clientIdToMessageClientIds(FacesContext context,
UIComponent component) {
Map requestMap = context.getExternalContext().getRequestMap();
Set clientIds;
String key = ExtensionConstants.TEEDA_EXTENSION_MESSAGE_CLIENTIDS;
if (requestMap.containsKey(key)) {
clientIds = (Set) requestMap.get(key);
} else {
clientIds = new HashSet<string>();
}
clientIds.add(component.getClientId(context));
requestMap.put(key, clientIds);
}

0 件のコメント:

コメントを投稿