为什么在 jsf 中更改语言后 <p:selectOneMenu> 中的值会重复?
why values in <p:selectOneMenu> are duplicated after changing language in jsf?
我将 JSF 配置用于国际化,并且我在 <p:selectOneMenu>
中有 class Locale
中的国家/地区列表,但是
当我更改页面
的语言时,我面临 <p:selectOneMenu>
中国家列表重复值的问题
我该如何解决这个问题?
private List<String> countriesList = new ArrayList<String>();
public void setCountriesList(List<String> countriesList) {
this.countriesList = countriesList;
}
public List<String> getCountriesList() {
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
countriesList.add(obj.getDisplayCountry(Locale.ENGLISH));
}
Collections.sort(countriesList);
return countriesList;
}
如果没有看到更多代码,我真的无法分辨,但据我所见,我的猜测如下:
可能每次更改语言时您都会调用 getCountriesList
,因为它正在向列表 countriesList
添加条目,这不是方法的本地方法,而是 class 成员,并且因此更持久,这些条目累积在该列表中。
试试
ArrayList<List> countriesList = new ArrayList<String>();
在方法的开头 getCountriesList
以确保您正在处理局部变量。这是我期望名称遵循模式 "getSomething".
的方法的行为
我将 JSF 配置用于国际化,并且我在 <p:selectOneMenu>
中有 class Locale
中的国家/地区列表,但是
当我更改页面
<p:selectOneMenu>
中国家列表重复值的问题
我该如何解决这个问题?
private List<String> countriesList = new ArrayList<String>();
public void setCountriesList(List<String> countriesList) {
this.countriesList = countriesList;
}
public List<String> getCountriesList() {
String[] locales = Locale.getISOCountries();
for (String countryCode : locales) {
Locale obj = new Locale("", countryCode);
countriesList.add(obj.getDisplayCountry(Locale.ENGLISH));
}
Collections.sort(countriesList);
return countriesList;
}
如果没有看到更多代码,我真的无法分辨,但据我所见,我的猜测如下:
可能每次更改语言时您都会调用 getCountriesList
,因为它正在向列表 countriesList
添加条目,这不是方法的本地方法,而是 class 成员,并且因此更持久,这些条目累积在该列表中。
试试
ArrayList<List> countriesList = new ArrayList<String>();
在方法的开头 getCountriesList
以确保您正在处理局部变量。这是我期望名称遵循模式 "getSomething".