Ich habe einen <f:viewParam>
Tag auf JSF-Seiten, der nach Konvertierung und Validierung GET-Parameter für die entsprechende verwaltete Bean festlegt.Validierungs-/Konvertierungsfehler von <f:viewParam> werden nicht in <f: locale anzeigen> lokalisiert, sondern im Standardgebietsschema
Wenn entweder Wandlungs- bzw. Validierungsfehler auftreten, wird eine entsprechende Fehlermeldung abgerufen von einem Ressourcenbündel und angezeigt auf <p:messages>
(auch <p:growl>
<h:messages>
oder sein kann).
Die Anwendung ist mehrsprachig. Wenn eine andere Sprache ausgewählt wird, sollte daher eine Nachricht in dieser Sprache angezeigt werden. Die Nachricht wird jedoch immer gemäß der Standardländereinstellung en
(für Englisch) angezeigt.
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>
Der Konverter:
@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.
}
}
Außer den Nachrichten von <f:viewParam>
, ist es kein Problem. Alle anderen Arten von Nachrichten werden in der Sprache angezeigt, die vom Benutzer ausgewählt wurde.
Gibt es etwas Besonderes mit <f:viewParam>
?
Ich kann diese Methode 'evaluateExpressionGet (String expression)' nicht sehen. Ich kann nur sehen 'public T evaluateExpressionGet (FacesContext-Kontext, String Ausdruck, Klasse extends T> expectedType) löst stattdessen ELException'. Ist es da? –
Tiny
Entschuldigung, ich habe ein zu stark vereinfachtes Beispiel gepostet (eigentlich habe ich einen statischen Import von 'org.omnifaces.util.Faces' verwendet) und fälschlicherweise angenommen, dass Sie den Hinweis bezüglich des Jobs der Methode verstehen. Ich habe die Antwort aktualisiert. – BalusC
Es scheint, wenn die View-Metadaten verarbeitet werden, das äußere Tag f: view wird nicht berücksichtigt, aber theoretisch sollte es nicht so sein, weil f: view etwas Besonderes ist. Sieht für mich wie ein Käfer aus. – lu4242