求助:jsf 的国际化问题
想实现一个在登陆页面中选择语言(比如中文或英文)然后在接下的页面中根据所选的语言,用对应的语言显示
在登陆页面中
<h:selectOneMenu id= "selectLanguage " value= "#{loginBean.language} "
onchange= "this.form.submit();
"valueChangeListener= "{loginBean.changeLocale} ">
<f:selectItem itemValue= "zh " itemLabel= "#{res.zh} " />
<f:selectItem itemValue= "tw " itemLabel= "#{res.tw} " />
<f:selectItem itemValue= "en " itemLabel= "#{res.en} " />
</h:selectOneMenu>
下拉选择框的事件响应如下:
public void changeLocale(ValueChangeEvent event) {
String newLanguage = (String)event.getNewValue();
if( "zh ".equals(newLanguage)){
setLanguage( "zh_CN ");
System.out.println( "zh ");
}
else if( "tw ".equals(newLanguage)){
setLanguage( "zh_TW ");
}
else if( "en ".equals(newLanguage)){
setLanguage( "en_US ");
System.out.println( "en ");
}
}
public void setLanguage(String language) {
if(language==null){
FacesContext ctx = FacesContext.getCurrentInstance();
language = ctx.getViewRoot().getLocale().toString();
}
this.language = language;
}
在其他的页面上我用如下的方式:
<f:view locale= "#{loginBean.language} ">
<f:loadBundle basename= "messages " var= "msgs "/>
在faces_config.xml我加了
<locale-config>
<default-locale> zh_CN </default-locale>
<supported-locale> en_US </supported-locale>
<supported-locale> zh_TW </supported-locale>
</locale-config>
但是除了登陆页面在我选英文后可以根据改变
其他的页面上都不行
都是按选择中文时显示
[解决办法]
除非你的loginBean.language是session级的,否则不要在其它的页面中写
<f:view locale= "#{loginBean.language} ">
<f:loadBundle basename= "messages " var= "msgs "/>
直接写 <f:view> ,只在第一页写locale属性即可,因为如果你的loginBean.language一旦为空,它就会自己在xml找到zh_CN,所以就成中文了。
[解决办法]
上apache下载一个myfaces-example-simple-1.1.5-SNAPSHOT.war的例子,研究研究