2011-10-19 7 views
0

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を持っています)

- どうすれば修正できますか?

答えて

2

リソースバンドルのファイル名は、コンポーネントのファイル名と同じであるである必要があります。

複合コンポーネントを表すdemoCustomComponent.xhtmlファイルがある場合は、demoCustomComponent.propertiesファイルに(デフォルトの)ローカライズされたメッセージが含まれている必要があります。例えばdemoCustomComponent_es.propertiesで国際化することはできますが、パスには常にデフォルトのパス名が必要です。

+0

わかりました。 UI用の私のアプリケーションの他のローカリゼーションは、ファイル名を変更することができます、ちょうどfaces-config.xmlにバンドルを追加する必要があります。しかし、異なる複合コンポーネントの場合。 これで解決しました。ありがとう! – sfrj

+0

それは私にとってはうまくいかない。私は3つの異なる.propertiesファイルを持っています(そして、_xxサフィックスのない1つのデフォルト)。メッセージは常にこのデフォルトのプロパティーファイルから取り込まれます。 FacesContext.getCurrentInstance()。getViewRoot()。setLocale(locale)を使用して言語を変更しようとしました。また、インターネットブラウザのlang設定を変更しました。 L10nのStandart(複合コンポーネントではない)の変更は機能します。何か案が? – Ziletka

関連する問題