JSFのコンポジットコンポーネントでローカリゼーションがどのように機能するかについては疑問があります。JSF 2コンポジットコンポーネントをローカライズする方法
私は、少しの例で複合コンポーネントのローカライズを練習することに決めました。私は複合成分(のWebContent /リソースのサブフォルダ)が正確に同じフォルダ内の.propertiesファイルを作成お薦め後
labelField1 = FIELD 1
labelField2 = FIELD 2
私は#{cc.resourceBundleMapを用います。コンポーネントのimplmentationにローカライズされたテキストを追加するには:
<html>
<composite:interface>
...
</composite:interface>
<composite:implementation>
<h:form>
<h:outputText value="#{cc.resourceBundleMap.labelField1}"/>
...
<h:outputText value="#{cc.resourceBundleMap.labelField2}"/>
...
</h:form>
</composite:implementation>
</html>
問題を、私はアプリケーションを実行するときはこれです:
私の質問があり
SEVERE: Error Rendering View[/index.xhtml]
javax.el.ELException: /resources/custom/demoCustomComponent.xhtml @14,63 value="#{cc.resourceBundleMap.labelField1}": java.lang.NullPointerException
....
Caused by: java.lang.NullPointerException
at javax.faces.component.UIComponent.findComponentResourceBundleLocaleMatch(UIComponent.java:1000)
...:
- 何とかそのメッセージバンドルを手動でロードする必要がありますか?これは自動的に起こるはずですか?
他のメッセージバンドルは、複合コンポーネントが存在するフォルダの外にある私のアプリの中にありますが、これを妨害していますか?(私はテンプレートやUIの他の部分のためにアプリケーションのどこかにmessage_en.propertiesを持っています)
- どうすれば修正できますか?
わかりました。 UI用の私のアプリケーションの他のローカリゼーションは、ファイル名を変更することができます、ちょうどfaces-config.xmlにバンドルを追加する必要があります。しかし、異なる複合コンポーネントの場合。 これで解決しました。ありがとう! – sfrj
それは私にとってはうまくいかない。私は3つの異なる.propertiesファイルを持っています(そして、_xxサフィックスのない1つのデフォルト)。メッセージは常にこのデフォルトのプロパティーファイルから取り込まれます。 FacesContext.getCurrentInstance()。getViewRoot()。setLocale(locale)を使用して言語を変更しようとしました。また、インターネットブラウザのlang設定を変更しました。 L10nのStandart(複合コンポーネントではない)の変更は機能します。何か案が? – Ziletka