2011-10-19 18 views
0

我對JSF中複合組件的本地化如何工作有些疑惑,我想了解它是如何工作的。如何本地化JSF 2複合組件

所以我決定用一個小例子來練習複合組件的本地化。

繼建議I在所述複合部件是

labelField1 = FIELD 1 
labelField2 = FIELD 2 

然後我用#{cc.resourceBundleMap完全相同的文件夾(的WebContent /資源的一個子文件夾)創建的屬性文件。本地化的文本添加到組件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) 

...

我的問題是:

- 我是否需要手動加載該消息捆綁或這應該自動發生?

- 在我的應用程序中,複合組件所在的文件夾之外的其他消息包打擾了這個嗎?(我還有一個message_en.properties在應用程序的其他位置,用於UI的模板和其他部分)

- 我該如何解決它?

回答

2

資源包的文件名必須爲,確切地說與組件的文件名相同。

因此,如果您有一個代表複合組件的demoCustomComponent.xhtml文件,那麼應該有一個demoCustomComponent.properties文件來保存(默認)本地化消息。您可以將其國際化,例如demoCustomComponent_es.properties,但您應始終在路徑中具有默認值。

+0

好吧,我明白了。在我的應用程序UI中的其他本地化,可以更改其文件名稱,只需要在faces-config.xml中添加該包。但對於不同的複合組件。 現在我修好了。謝謝! – sfrj

+0

它不適合我。我有三個用於不同語言的.properties文件(以及一個沒有_xx後綴的默認文件),並且該消息始終由此默認屬性文件填充。我嘗試使用FacesContext.getCurrentInstance()。getViewRoot()。setLocale(locale)更改語言並更改我的Internet瀏覽器的lang設置。 Standart(不是複合組件)改變L10n的作品。任何想法? – Ziletka