J'ai un fichier de propriétés pour la localisation:
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "There was an error saving this widget.", null); FacesContext.getCurrentInstance().addMessage(null, message);
5 Réponses :
Voici un exemple sur la façon de faire cela: http://www.laliluna.de/articles/ Javaserver-Faces-Message-Resource-Bundle-Tutorial.html P>
Vous souhaitez jeter un coup d'œil sur la salutations,
Lars p> ressourcebundle.getbundle () code> partie. p>
J'ai vu cela quand je l'ai googlé. Cependant, y a-t-il un moyen plus élégant d'avoir le conteneur injecter cela à l'aide de @Resource ("# {msgs}") ou quelque chose comme ça? Je suppose que depuis que j'utilise CDI, je pourrais créer un producteur de @MessageBundle code> ou quelque chose, puis transmettez simplement une propriété
code> objet ...
J'ai utilisé cette approche dans l'un de nos derniers projets - nous avons eu le problème identique aux erreurs de DB. Je peux jeter un coup d'œil à l'ancienne source mercredi la semaine prochaine si cela est toujours non résolu.
Vous avez raison que c'est un moyen valide de le faire. Je me demandais simplement s'il y avait un moyen de le faire plus élégamment. Je peux simplement utiliser CDI pour l'injecter. Cela fonctionnera s'il n'y a pas d'annotation intégrée.
J'ai posé une question assez connexe sur SO: Comment injecter un non- classe sérialisable (comme java.util.resourcebundle) avec Soudure
et à l'intérieur du forum de couture: http://seamframework.org/community/howtocreeantanInjectAbletsourcebundlewithweld P>
Résumée: J'ai réalisé une ressource injectableBundle avec 3 producteurs. D'abord, vous avez besoin d'un facescontextProducer. J'ai pris celui des sources alpha de couture 3. P>
@Named public class MyBean { @Inject private transient ResourceBundle bundle; public void testMethod() { bundle.getString("SPECIFIC_BUNDLE_KEY"); } }
Vous pouvez le faire avec JSF seul.
Commencez par définir une propriété gérée sur votre haricot de support. Dans la configuration JSF, vous pouvez définir la valeur de la propriété gérée sur une expression El qui fait référence à votre ensemble de ressources. P>
J'ai fait quelque chose comme les suivants à l'aide de Tomcat 6. La seule mise en garde est que vous ne pouvez pas Accédez à cette valeur de votre constructeur de haricot de support, car JSF n'aura pas encore initialisé. Utilisez Ceci présente l'avantage de faire des méthodes de haricot de support moins dépend de la technologie de présentation, il devrait donc être plus facile de tester. Il découle également votre code des détails comme le nom donné au nom de l'ensemble. P> Certains tests utilisant Mojarra 2.0.4-B09 affichent une petite incohérence lorsqu'un utilisateur change la mi-session. Les expressions EL à la page utilisent les nouveaux paramètres régionaux mais le haricot de support n'est pas donné la nouvelle référence de ressources de ressources. Pour que cela soit cohérent, vous pouvez utiliser la valeur de la propriété Bean dans El Expressions, telles que l'utilisation de @postConstruct code> sur une méthode d'initialisation si la valeur est nécessaire tôt dans le cycle de vie du bean. P>
# {backingbean.messages.greeting} code> à la place de
# {msgs.greeting} code>. Ensuite, la page El et la haricot de support utiliseraient toujours les paramètres régionaux actifs lorsque la session a commencé. Si les utilisateurs avaient em> pour commuter les paramètres régionaux de la session et obtenir les nouveaux messages, vous pouvez essayer de faire une graine de demande de requête et lui donner des références à la fois au beuge de session et à la botte de ressources. P> p>
Dans JSF2, vous pouvez simplement utiliser @ManageDProperty ("# {msgs}") msg de ressources privées; code> (avec setter).
C'est une ancienne question mais j'ajoute une autre façon de le faire. Je cherchais quelque chose d'autre et je suis rentré à travers cela. Les méthodes ici semblaient toutes convoluées pour quelque chose qui ne me frappe pas comme tout ce qui est difficile. Jouer avec Glitter parce que c'est joli si vous me demandez.
donné un fichier: p> à l'intérieur du fichier: p> i crée une méthode "getBundle ()" Puisque j'aime attraper le temps d'exécution et ajouter un message significatif afin que je comprendrai d'où cela vient. Pas difficile et peut aider si vous obtenez le caprice de jeu avec les fichiers de propriétés pour une raison quelconque et ne vous mettez pas à jour correctement. Je fais parfois ce privé car il s'agit parfois d'une méthode d'assistance dans une classe (pour moi). Cela empêche l'essai d'attraper l'encombrement du code significatif. P> L'utilisation du chemin complet du fichier vous permet de le mettre quelque part autre que l'emplacement / le répertoire par défaut si vous avez d'autres idées sur l'organisation. P > public/private ResourceBundle getMessageResourceBundle(){
String messageBundle = "com.full.package.path.to.messages.errormessages";
ResourceBundle bundle = null;
try{
bundle = ResourceBundle.getBundle(messageBundle);
}catch(MissingResourceException ex){
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE,
"Unable to find message bundle in XYZ Class", ex);
throw ex;
}
}
public void doSomethingWithBundle(){
ResourceBundle bundle = getMessageResourceBundle();
String someString = bundle.getString("SOME_ERROR_STRING");
...
}
Mais les messages sont récupérés sans prendre en considération les locaux