如何使用值更改侦听器更改JSF页面中的区域设置?

时间:2013-11-05 04:44:16

标签: jsf-2 locale valuechangelistener

我一直在尝试使用选择框动态更改我的JSF应用程序的语言环境。但是,只有在我更改了faces-config.xml中的设置时,才会更改区域设置。帮助我.. enter code here

<application>
           <locale-config>
                <default-locale>en</default-locale>
           </locale-config>
       <resource-bundle>
        <base-name>com.messages.messages_en</base-name>
        <var>msg</var>
       </resource-bundle>
     </application>

我的价值改变听众是,

public void countryLocaleCodeChanged(ValueChangeEvent e){
        String newLocaleValue = e.getNewValue().toString();

        //loop country map to compare the locale code
                for (Map.Entry<String, Object> entry : countries.entrySet()) {

               if(entry.getValue().toString().equals(newLocaleValue)){

                FacesContext.getCurrentInstance()
                    .getViewRoot().setLocale((Locale)entry.getValue());

              }
               }

1 个答案:

答案 0 :(得分:0)

我发现了错误。问题在于faces-config.xml文件中的设置。正确的设置如下..

<application>
           <locale-config>
            <supported-locale>en</supported-locale>                 
           <supported-locale>fr</supported-locale>
           </locale-config>
       <resource-bundle>
        <base-name>com.messages.messages</base-name>

        <var>msg</var>

       </resource-bundle>
     </application>

在上面的代码中,base-name是属性文件的位置。在我的示例中,包名称是com.messages,属性文件是消息。在这里,我采用了两种英语和法语语言环境。我选择的默认语言环境是英语(en)。根据用户选择的语言环境,它会选择messages_en.properties或messages_fr.properties。