Comment puis-je obtenir un message bundle chaîne à partir de l'intérieur d'un managed bean?
Je voudrais être en mesure de récupérer une chaîne de caractères à partir d'un message faisceau à l'intérieur de la JSF 2 managed bean. Ce serait le cas dans les situations où la chaîne est utilisée comme le résumé ou les détails de ce paramètre dans une FacesMessage
ou que le message de la levée d'une exception.
Je veux faire en sorte que le managed bean charge le message correct bundle pour la locale de l'utilisateur. Il n'est pas clair pour moi comment faire cela dans un managed bean en utilisant JSF appels d'API.
Ma configuration est:
- Utilisant Tomcat 7 comme le récipient de sorte que la solution ne peut pas compter sur les appels d'API, qui ne fonctionnent que dans un serveur d'application conteneur
- À l'aide de la JSF 2 implémentation de référence (Mojarra)
- Ne PAS utiliser toutes les bibliothèques qui permettent CDI
REMARQUE: je ne vois cette question similaire, mais cela dépend des fonctionnalités qui sont disponibles dans ma configuration
EDIT: j'ai fait une erreur dans ma question initiale. Ce que je voulais dire était: "Comment puis-je obtenir un ressources bundle chaîne à partir de l'intérieur d'un bean géré"? BalusC m'a donné la réponse correcte pour ce que j'ai demandé. La solution pour ce que je voulais dire est très similaire:
public static String getResourceBundleString(
String resourceBundleName,
String resourceBundleKey)
throws MissingResourceException {
FacesContext facesContext = FacesContext.getCurrentInstance();
ResourceBundle bundle =
facesContext.getApplication().getResourceBundle(
facesContext, resourceBundleName);
return bundle.getString(resourceBundleKey);
}
Aussi, voici un lien vers une autre question qui explique la différence entre "message" faisceaux et "ressources" faisceaux.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir le complet bundle nom de
<message-bundle>
parApplication#getMessageBundle()
. Vous pouvez obtenir les paramètres régionaux en cours parUIViewRoot#getLocale()
. Vous pouvez obtenir unResourceBundle
d'un bundle completle nom et les paramètres régionaux par
ResourceBundle#getBundle()
.Donc, en résumé:
Mise à jour: conformément à l'erreur dans la question, vous voulez vraiment obtenir le bundle qui est identifié par le
<base-name>
de<resource-bundle>
. Ce n'est malheureusement pas accessible directement par une norme API JSF. Vous avez pour coder en dur le même nom de base dans le code et remplacer lemessageBundleName
dans l'exemple ci-dessus, ou de l'injecter comme une propriété gérée sur<var>
dans la portée de la requête bean:messageBundleName
est mis à null, ce qui provoque uneNullPointerException
dans l'appel àgetBundle()
.ici est la clé est le nom de propriété qui vous souhaitez accéder à partir du fichier de propriétés .
Cette entrée est à partir de messages.properites fichier. et "le message" est "la clé" .
Il y a deux façons d'obtenir de la Chaîne de regroupement de ressources dans managed bean, à l'aide de
baseName
ouvarName
(voir la définition de chacun ci-dessous):À l'aide de varName:
varName
: est la Chaîne de caractères représentant la<var></var>
dans<resource-bundle>
À l'aide de baseName:
baseName
: Le nom complet de la ressource bundle (<base-name>
dans<resource-bundle>
).ResourceBundle#getBundle()
prend le nom de base comme 1er argument. Peut-être que vous êtes confus parce que vous leur avez donné les deux la même valeur.