Стратегии JSF для длинных списков в SelectOneMenu, например. Часовые пояса

Я реализую способ, которым пользователь может указать свой часовой пояс. Ничего нового. Я хочу услышать, что люди говорят о хорошей стратегии для обработки случаев, когда пользователям нужно выбрать из списка пару сотен вариантов, но они могут не сразу знать правильное значение для него в списке. Я знаю, что могу использовать что-то вроде автозаполнения, но это работает, только если люди знают, что ищут. Конечно, страны должны быть очевидны, но... наименьший общий знаменатель (некоторые люди тупые... как я;).

Существует более 400 различных часовых поясов iso (не считая таких вещей, как EST, PST и т. д., которые я не включаю). Это длинный список. Его можно удобно разделить, если мы позволим пользователю сначала выбрать страну, в которой он находится, скажем, в другом selectonemenu. Но там более 200 стран. Итак, как представить 200 стран, с которыми легко и эффективно работать?

Я уже создал и упаковал в банку ряд классов для чтения из файлов часовых поясов Олсона (iso3166.tab и zone.tab) и предоставления массивов часовых поясов и стран часовых поясов, включая приоритет определенных стран в верхней части списка. Но теперь я хотел бы, возможно, научиться лучше представлять страны и часовые пояса. Я сделал это сам, так как нашел более простой и чистый способ извлечения и сопоставления кодов стран и кодов часовых поясов.


person Bill Rosmus    schedule 22.10.2012    source источник
comment
я думаю, как пользователь, я предпочту часовые пояса и страны в алфавитном порядке, а не какую-то другую схему приоритетов   -  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. Используя это, вы можете получить объект 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