JSF 1.2 Application.GetMessageBundle()Nullを返します
-
30-09-2019 - |
質問
私は使用しています 春2.5 と JSF 1.2, 、 の上 Tomcat 6.0.13.
コードの一部では、ロードしようとしています ResourceBundle 次のアプローチを使用することにより:
ResourceBundle.getBundle(context.getApplication().getMessageBundle(), Locale.EN);
問題はそれです getMessageBundle() メソッド返品 ヌル. 。これは使用されていました JSF 1.1. 。誰かが何が問題になるのか考えていますか?
今のところ、ハードコードバンドル名に行きますが、すべての構成データが内部に配置される場合はお好みです facesconfig.
リソースバンドルは次のように設定されています。
<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>
解決
getMessageBundle()
の値を返します <message-bundle>
入場 faces-config.xml
, 、ではありません <resource-bundle>
エントリ。
その値は、実際にはJSF 1.2 APIによって利用できません。自分で指定する必要があります。
ResourceBundle bundle = context.getApplication().getResourceBundle(context, "org.mysite.MessageBundle");
<message-bundle>
検証/変換メッセージ用です。おそらくあなたは 実際に これをJSF 1.1で使用しました。
他のヒント
イゴルブ、
リソースインジェクションを使用して、JSFにマネージドビーンに正しいリソースバンドルを提供させることができる場合があります。これにより、Javaソースの何かをハードコードし、協会をうまく集中化する必要性が削除されます。
バッキングビーンで管理されたプロパティを定義することから始めます。 JSF構成では、マネージドプロパティの値をリソースバンドルを参照するEL式に設定します。
Tomcat 6を使用して次のようなことをしました。唯一の注意点は、JSFがまだ初期化されていないため、Backing Beanのコンストラクターからこの値にアクセスできないことです。使用する @PostConstruct
豆のライフサイクルの早い段階で値が必要な場合の初期化方法。
<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>