JSF標準要約メッセージおよび詳細メッセージをカスタマイズするために、次の処理を実行できます。
変換および検証エラーに対するJSF標準メッセージをオーバーライドするには、次の処理を実行します。
メッセージ・リソース・バンドルには、JSF標準メッセージ・キーとカスタム・メッセージ・テキストに対するキーと値のペアが含まれている必要があります。リソース・バンドル(アプリケーションのクラスパスに格納)は、PropertyResourceBundle
に基づくテキスト・ファイル、またはListResourceBundle
を拡張するクラス・ファイルです。このトピックの例では、プロパティ・リソース・バンドルが使用されています。
カスタム・メッセージ・テキストの値部分にパラメータ・プレースホルダを使用して、有効な値を参照できます(例: Please enter a value between {2} and {3}.
)。
ローカライズ・メッセージ・バンドルは、適切なロケール文字列表現をベース名に付加することで作成されます。たとえば、ベース・ファイル名がMessages.properties
の場合、ローカライズ・バンドルはMessages_es.properties
です。リソース・バンドルおよびローカライズの詳細は、java.util.ResourceBundle
に関するJavadoc、およびInternationalization(I18N)に関するSun Developer Networkサイトを参照してください。URLは次のとおりです。
http://java.sun.com/j2se/corejava/intl/index.jsp
例として、標準の必須入力エラー・メッセージを置換するには、次のコードをMessages.properties
リソース・バンドルに指定します。
javax.faces.component.UIInput.REQUIRED=Please enter a value.
javax.faces.component.UIInput.REQUIRED_detail=A value is required. Please enter a value.
さらに、次のコードをMessage_es.properties
に指定します。
javax.faces.component.UIInput.REQUIRED=Some Spanish text.
javax.faces.component.UIInput.REQUIRED_detail=More Spanish text.
注意: ローカライズ・リソース・バンドルの使用方法の詳細は、「JSFでのローカライズ・データおよびメッセージの使用について」を参照してください。
JSF標準メッセージをオーバーライドするには、アプリケーション構成ファイル(faces-config.xml
)にメッセージ・バンドルを登録する必要があります。JSF構成エディタを使用してfaces-config.xml
ファイルを開きます。<application>
要素の下の<message-bundle>
要素に、リソース・バンドルへの完全修飾パスを追加します。
次のコード・スニペットは、メッセージ・バンドルを登録する方法を示しています。
<faces-config>
<application>
<message-bundle>login.model.Messages</message-bundle>
...
</application>
...
</faces-config>
JSFでは、JSF標準バンドルが検索される前に、登録されているリソース・バンドル内のメッセージが検索されることに注意してください。この方法で、リソース・バンドルで適切なキーを使用して、標準メッセージをオーバーライドできます。
JSFページで、h:message
またはh:messages
タグを使用してカスタム・メッセージを表示します。タグの詳細は、「標準JSFメッセージ・タグについて」を参照してください。
JSF標準エラー・メッセージでは、問題に関する説明は提供されますが、メッセージの対象のフォーム・フィールドに関する情報は提供されません。次のコード・スニペットについて考えてみます。
<h:outputText value="Number of items:"/>
<h:inputText id="qtyno" value="#{shopcart.qty}">
<f:validateLength minimum="1" maximum="5"/>
</h:inputText>
ユーザーが範囲外の値を入力した場合、標準のJSF検証エラー・メッセージは次のように表示されます。
検証エラー: 指定した属性の値が1から5の間ではありません。
メッセージの対象の入力フィールドに関する情報を追加するには、次の処理を実行します。
PhaseListener
の作成および登録
汎用コンポーネント属性を使用して、フィールド参照を入力コンポーネントに関連付けます。この汎用属性値に入力フィールドのラベルの値を設定します。
<h:outputText value="Number of items:"/>
<h:inputText id="qtyno" value="#{shopcart.qty}">
<f:validateLength minimum="1" maximum="5"/>
<f:attribute name="someRef" value="Number of items:"/>
</h:inputText>
汎用属性を取得してメッセージに追加するPhaseListener
実装を作成します。次に、カスタムのPhaseListener
実装をアプリケーション構成ファイル(faces-config.xml
)に登録します。
<faces-config>
<lifecycle>
<phase-listener>
com.mycompany.listeners.SomeListener
</phase-listener>
</lifecycle>
</faces-config>
PhaseListener
実装によって汎用属性が取得され、メッセージに挿入されます。次に例を示します。
public class SomeListener implements PhaseListener {
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
public void beforePhase(PhaseEvent e) {
FacesContext fc = e.getFacesContext();
UIViewRoot root = fc.getViewRoot();
Iterator i = fc.getClientIdsWithMessages();
while (i.hasNext()) {
String clientId = (String) i.next();
UIComponent c = root.findComponent(clientId);
String someRef =
(String) c.getAttributes().get("someRef");
if (someRef != null) {
Iterator j = fc.getMessages(clientId);
while (j.hasNext()) {
FacesMessage fm = (FacesMessage) j.next();
fm.setDetail(someRef + ": " + fm.getDetail());
}
}
}
}
public void afterPhase(PhaseEvent e) {
}
}
PhaseListener
インタフェースの詳細は、javax.faces.event.PhaseListener
に関するJavadocを参照してください。
ADF Facesのエラー・メッセージのカスタマイズについて
JSF標準エラー・メッセージ・テキストの置換
JSF標準メッセージへのフィールド参照情報の追加
Copyright © 1997, 2006, Oracle. All rights reserved.