为什么在 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".

的方法的行为