Question

J'utilise Spring 2.5 JSF 1.2 , sur Tomcat 6.0.13 .

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

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

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

Pour l'instant je vais nom de l'ensemble de hardcode, mais je préférerais que toutes mes données de configuration seront placés à l'intérieur config face-.

faisceau 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>
Était-ce utile?

La solution

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

Sa valeur est en fait pas avaliable par l'API JSF 1.2. Vous devez spécifier vous-même.

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

Le <message-bundle> est pour les messages de validation / conversion. Probablement que vous avez en fait utilisé dans ce JSF 1.1.

Autres conseils

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 éliminerait la nécessité de tout coder en dur dans votre source Java et de garder l'association bien centralisée.

Commencez par définir une propriété gérée sur votre backing bean. Dans la configuration de JSF, définissez la valeur de la propriété gérée à une expression EL que les références de votre groupe de ressources.

Je l'ai fait quelque chose comme ce qui suit à l'aide de Tomcat 6. La seule réserve est que vous ne pouvez pas accéder à cette valeur du constructeur de haricot votre soutien, car JSF ne sera pas encore initialisé il. Utilisation @PostConstruct sur une méthode d'initialisation si la valeur est nécessaire au début du cycle de vie du haricot.

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top