JSFページに<f:viewParam>
というタグがあり、変換および検証後に対応するマネージドBeanにGETパラメータを設定します。<f:viewParam>のバリデーション/変換エラーは、<f:view locale>にデフォルトロケールにローカライズされません。
変換エラーまたは検証エラーのいずれかが発生すると、適切なエラーメッセージがリソースバンドルから取得され、<p:messages>
(<p:growl>
または<h:messages>
)に表示されます。
アプリケーションは多言語対応です。したがって、別の言語を選択すると、その言語でメッセージが表示されますが、デフォルトのロケールen
(英語)に従ってメッセージが常に表示されます。
Test.xhtml:
<!DOCTYPE html>
<html lang="#{localeBean.language}"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:view locale="#{localeBean.locale}">
<f:metadata>
<f:viewParam name="id" converter="#{myConverter}" />
</f:metadata>
<h:head>
<title>Test</title>
</h:head>
<h:body>
<h:messages />
</h:body>
</f:view>
</html>
コンバータ:<f:viewParam>
からのメッセージを除き
@FacesConverter("myConverter")
public final class MyConverter implements Converter
{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
ResourceBundle bundle = context.getApplication()
.evaluateExpressionGet(context, "#{messages}", ResourceBundle.class);
String message = bundle.getString("id.conversion.error");
throw new ConverterException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, message, null));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value)
{
throw new UnsupportedOperationException(); // Not relevant in this problem.
}
}
、問題はありません。他のすべての種類のメッセージは、ユーザーが選択した言語で表示されます。
<f:viewParam>
には特別なものはありますか?
このメソッドは 'evaluateExpressionGet(String expression)'には見えません。代わりに 'publicT evaluateExpressionGet(FacesContextコンテキスト、文字列式、クラス extends T> expectedType)のみが「ELException'をスローします。そこにいますか? –
Tiny
申し訳ありませんが、私は(実際には、org.omnifaces.util.Faces'から静的なインポートを使用していた)単純化されたサンプルを投稿し、メソッドの仕事に関するヒントを理解していると誤って想定しました。私は答えを更新しました。 – BalusC
ビューのメタデータが処理され、外側のf:viewタグは考慮されていませんが、理論的にはf:viewは特別なものであるため、そうであってはいけません。私のバグのように見えます。 – lu4242