2010-12-02 4 views
4

J'utilise Spring 2.5 avec JSF 1.2, sur Tomcat 6.0.13.JSF 1.2 Application.getMessageBundle() retourne null

Dans une partie de code, je suis en train de charger ResourceBundle en utilisant l'approche suivante:

ResourceBundle.getBundle(context.getApplication().getMessageBundle(), Locale.EN); 

Le problème est que getMessageBundle() méthode retourne null. Cela a l'habitude de travailler avec JSF 1.1. Est-ce que quelqu'un a une idée de ce qui pourrait être le problème?

Pour l'instant je vais coder en dur le nom du paquet, mais je préférerais que toutes mes données de configuration soient placées à l'intérieur faces-config.

ensemble de ressources est défini comme suit:

<application> 
     <locale-config> 
      <default-locale>en</default-locale> 
     </locale-config> 
     <resource-bundle> 
      <base-name>org.mysite.MessageBundle</base-name> 
      <var>msgs</var> 
     </resource-bundle> 
    </application> 

Répondre

2

Les getMessageBundle() renvoie la valeur d'entrée <message-bundle> dans faces-config.xml, pas l'entrée <resource-bundle>.

Sa valeur n'est pas disponible pour l'API JSF 1.2. Vous devez le spécifier vous-même.

ResourceBundle bundle = context.getApplication().getResourceBundle(context, "org.mysite.MessageBundle"); 

Le <message-bundle> est pour les messages de validation/de conversion. Vous avez probablement effectivement utilisé dans JSF 1.1.

+0

Ok, je ne savais pas que cette fonctionnalité manquait ins JSF 1.2. Merci beaucoup! – Igor

+0

Il n'est également pas présent dans les autres versions. Je m'attendrais à quelque part dans 2.0, mais il n'y en a pas non plus. Vous devez avoir confondu resourcebundles (pour le contenu) avec messagebundles (pour facesmessages). – BalusC

3

IgorB,

Vous pouvez être en mesure d'utiliser l'injection de ressources pour avoir JSF fournir votre bean géré avec le ResourceBundle correct. Cela supprimerait le besoin de coder en dur n'importe quoi dans votre source Java et garderait l'association bien centralisée.

Commencez par définir une propriété gérée sur votre bean backing. Dans la configuration JSF, définissez la valeur de la propriété gérée sur une expression EL qui référence votre regroupement de ressources. J'ai fait quelque chose comme ce qui suit en utilisant Tomcat 6. Le seul inconvénient est que vous ne pouvez pas accéder à cette valeur depuis le constructeur de votre bean backing car JSF ne l'a pas encore initialisé. Utilisez @PostConstruct sur une méthode d'initialisation si la valeur est nécessaire au début du cycle de vie du bean.

<managed-bean> 
    ... 
    <managed-property> 
    <property-name>messages</property-name> 
    <property-class>java.util.ResourceBundle</property-class> 
    <value>#{msg}</value> 
    </managed-property> 
    ... 
</managed-bean> 

<application> 
    ... 
    <resource-bundle> 
    <base-name>application_messages</base-name> 
    <var>msg</var> 
    </resource-bundle> 
    ... 
</application> 
+0

Merci beaucoup pour votre suggestion! – Igor

Questions connexes