JSF стратегии за дълги списъци в SelectOneMenu, напр. Времеви зони

Прилагам начин потребителят да посочи часовата си зона. Нищо ново там. Искам да чуя какво казват хората като добра стратегия за справяне със случаи, когато потребителите трябва да изберат от списък с няколкостотин възможности за избор, но може да не знаят правилната стойност за това в списъка веднага. Знам, че мога да използвам нещо като автоматично довършване, но това работи само ако хората знаят какво търсят. Разбира се, държавите трябва да са очевидни, но... най-малкият общ знаменател (някои хора са тъпи... като мен ;).

Има нещо над 400 отделни iso часови зони (без неща като EST, PST и т.н., които не включвам). Това е дълъг списък. Може да се раздели удобно, ако позволим на потребителя да избере първо държавата, в която се намира, в друго меню за избор. Но има повече от 200 държави. И така, как да представим 200 държави, с които да се работи лесно и ефективно?

Вече създадох и пакетирах в буркан редица класове за четене от файловете за часови зони на Olson (iso3166.tab и zone.tab) и предоставям списъци с масиви от часови зони и страни от часови зони, включително приоритизиране на определени държави в горната част на списъка. Но сега бих искал може би да науча по-добър начин за представяне на държавите и часовите зони. Направих това сам, тъй като открих, че е по-лесен и чист начин за извличане и корелиране на кодове на държави и часови зони.


person Bill Rosmus    schedule 22.10.2012    source източник
comment
Предполагам, че като потребител ще предпочета азбучно подредени часови зони n държави, вместо някаква друга схема за приоритизиране   -  person Mukul Goel    schedule 22.10.2012
comment
Това със сигурност е даденост. :) Но знам, че ако очаквате предимно потребители от, да речем, Северна Америка, може да поставите Канада и Америка в горната част на списъка и след това да изброите останалите по азбучен ред. Но това все още е дълъг списък.   -  person Bill Rosmus    schedule 23.10.2012


Отговори (1)


За вашето конкретно изискване мога да се сетя да използвам карта на света, каквато виждате в Linux дистрибуция като Ubuntu, центрирана в Гринуич. След това поставяне на маркери за данните, които имате, и оставяне на потребителя да избере най-близкия маркер.

Вижте избора на часова зона за 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;
    }

}

Друг подход е да използвате библиотеката Places от Google Maps. Използвайки това, можете да получите обекта google.maps.places.PlaceResult по различни методи, харесва ми функцията за автоматично попълване, където можете да изберете града. След като градът е избран, можете да покажете utc_offset в информационния прозорец.

Можете да разгледате това демо

В момента изглежда, че повечето градове нямат вече зададен utc_offset. Един от адресите, които открих, че има utc_offset, беше

Трансфер до летище Нюи в Австралия. След това можете да подадете off_set като входен скрит параметър, за да изпратите стойността на сървъра.

Вижте също:

person Ravi Kadaboina    schedule 23.10.2012
comment
За съжаление това е твърде тежко решение. Интересувам се повече от това какво правят хората с selectonemenus. Бих могъл да видя това решение, ако създавах съветник за инсталиране, но мисля, че е твърде много за обща употреба. Може да го пробвам като упражнение по-късно, но не в момента. Благодаря все пак за предложението. - person Bill Rosmus; 23.10.2012