SelectOneMenu中长列表的JSF策略,例如时区

时间:2012-10-22 18:44:16

标签: jsf-2 selectonemenu

我正在为用户实施一种指定时区的方法。那里什么新鲜事。当用户需要从几百个选项的列表中进行选择时,我想听听人们说处理案例的好策略,但可能不会立即知道列表中的正确值。我知道我可以使用像自动完成这样的东西,但这只有在人们知道他们在寻找什么的情况下才有用。肯定的国家应该是显而易见的但是......最低的共同点(有些人是愚蠢的......像我一样;)。

有超过400个不同的iso时区(不包括EST,PST等我不包括的东西)。这是一个很长的清单。如果我们让用户首先选择他们所在的国家,另一个选择菜单,则可以方便地划分。但是有200多个国家。那么如何展示200个容易和高效的国家呢?

我已经在jar中创建并打包了许多类,以便从Olson时区文件(iso3166.tab和zone.tab)中读取并提供时区和时区的arraylists,包括将指定国家/地区列为优先级名单。但现在我想学习更好的方式来展示国家和时区。我自己这样做了,因为我发现它是一种更简单,更清晰的方法来提取和关联国家/地区代码和时区代码。

1 个答案:

答案 0 :(得分:0)

根据您的特殊要求,我可以考虑使用像您在以格林威治为中心的Ubuntu这样的Linux发行版中看到的世界地图。然后为您拥有的数据放置标记,并让用户选择最近的标记。

请参阅Ubuntu

的时区选择

为此,您可以使用Primefaces GMAP组件并添加如下叠加层:

 LatLng coord1 = new LatLng(36.885233, 30.702323); 
 PlaceResult placeResultObj1 = new  new PlaceResult("660")

 //Basic marker  
 simpleModel.addOverlay(new Marker(coord1, "Konyaalti", placeResultObj1)); 

PlaceResult.java

public class PlaceResult {
    private String utc_offset;

    public PlaceResult(String utc_offset){
        this.utc_offset = utc_offset;
    }

    public String getUtc_offset() {
        return utc_offset;
    }

    public void setUtc_offset(String utc_offset) {
        this.utc_offset = utc_offset;
    }

}

另一种方法是使用Google地图中的地方信息库。使用它可以通过各种方法获取google.maps.places.PlaceResult对象,我喜欢自动完成功能,您可以在其中选择城市。选择城市后,您可以在infowindow中显示utc_offset。

您可以查看此demo

目前,似乎大多数城市都没有设置utc_offset。我发现有一个utc_offset的地址是

澳大利亚纽威机场接送班车。然后,您可以将off_set作为输入隐藏参数传递,以将值提交给服务器。

另见: