Object Primefaces自动完成showcase选择了错误的国家/地区对象

Object Primefaces自动完成showcase选择了错误的国家/地区对象,object,primefaces,autocomplete,Object,Primefaces,Autocomplete,为了构建邮政编码(PostCode:Ned)自动补全器,我开始调查Primefaces Country自动补全,并在CountryService.java组件中发现了一个bug。因此,CountryConverter返回错误的国家/地区对象 这是导致问题的CountryService.java代码片段: countries = new ArrayList<>(); for (int i = 0; i < locales.length; i++) { L

为了构建邮政编码(PostCode:Ned)自动补全器,我开始调查Primefaces Country自动补全,并在CountryService.java组件中发现了一个bug。因此,CountryConverter返回错误的国家/地区对象

这是导致问题的CountryService.java代码片段:

countries = new ArrayList<>();

for (int i = 0; i < locales.length; i++) {
            Locale country = new Locale("", locales[i]);
            countries.add(new Country(i, country.getDisplayCountry(), country.getCountry().toLowerCase()));
        }
        
        Collections.sort(countries, (Country c1, Country c2) -> c1.getName().compareTo(c2.getName()));
它返回错误的国家/地区对象,因为由于国家/地区列表的排序,最初分配的编号(Id)不再与数组实例(硬)索引相同

我从这个示例开始,在我自己的应用程序中,它导致返回错误的邮政编码对象。由于我还不熟悉Primefaces自动完成组件(我发现这是一件非常好的事情!),我首先认为我自己的解释代码中出现了一些错误。我花了一些时间才找到真正的原因

我构建了以下解决方案:

        Collections.sort(countries, (Country c1, Country c2) -> c1.getName().compareTo(c2.getName()));
        .....

        int n = 0;
        for (Country ctry : countries) {
            ctry.setId(n);
            n++;
        }
也许Primefaces可以纠正这个例子,我的经验会帮助其他人比我更快地实现p:autocomplete

I用PR固定:


这将在下一次Showcase部署中修复。

感谢您的报告,我将修复该Showcase示例!
        Collections.sort(countries, (Country c1, Country c2) -> c1.getName().compareTo(c2.getName()));
        .....

        int n = 0;
        for (Country ctry : countries) {
            ctry.setId(n);
            n++;
        }