Primefaces selectOneMenu не сохраняет фокус на выбранном элементе при повторном открытии - PullRequest
2 голосов
/ 13 февраля 2012

Компонент Primefaces p:selectOneMenu не фокусируется на ранее выбранном элементе. Например, если у меня есть меню стран, настроенное следующим образом

    <p:selectOneMenu id="countryMenu" value="#{myBean.selectedCountry}">
        <f:selectItem value="#{null}" itemLabel="Please select a Country..."/>
        <f:selectItems value="#{myBean.countries}" var="country" 
                       itemValue="#{country.code}" 
                       itemLabel="#{country.name}"/>
        <p:ajax update="anotherComponent"/>
    </p:selectOneMenu>

, и я выбираю страну из списка, затем снова нажимаю на меню, и вначале отображается список стран. Он сохраняет выбранную страну - он просто не прокручивается и не фокусируется на ней.

Стандарт JSF h:selectOneMenu отображает ожидаемое поведение - он открывается с видимой ранее выбранной страной.

Есть ли какая-то хитрость в этом или это ошибка?

У него также есть число других причуд с тем, как он реагирует на ввод с клавиатуры (например, нажатие вверх / вниз, когда меню имеет фокус, не открывает меню), что немного расстраивает .

Я использую:

  • Primefaces 3.1
  • Glassfish 3.1.1
  • NetBeans 7.1

Ответы [ 3 ]

0 голосов
/ 25 сентября 2012

Если вы обновитесь до Primefaces 3.4 (текущей версии на данный момент), у вас все еще будет похожее поведение, которое не ожидается.

Событие, если первый элемент имеет noSelectionOption="true", вы получаете такое же поведениечто кажется ошибкой в ​​обзоре, и сообщается здесь и здесь .Также есть форум тема об этом.

Но вы можете попробовать использовать свойство itemDisabled, так как оно решило эту проблему для меня:

<p:selectOneMenu id="hero" value="#{bean.hero}">
    <f:selectItem itemLabel="Select..." itemDisabled="true" />
    <f:selectItems var="item" value="#{bean.heroes}" itemLabel="#{item.name}" />
</p:selectOneMenu>

Iнадеюсь, это поможет.

0 голосов
/ 27 ноября 2012

Хорошо, похоже, это исправлено!

Я провел несколько тестов с различными версиями Primefaces со следующими результатами:

  • 3.1 - не работал

  • 3.2 - не работает

  • 3.3 - не работает (ранее выбранное значение мигает, затем отображается первый элемент меню)

  • 3.4 - работает должным образом

Примечание : мне нужно очистить кеш браузера (в Chrome иFirefox) при обновлении с 3.3 до 3.4 (элементы не могли быть выбраны вообще, пока я не сделал это).

0 голосов
/ 30 марта 2012

Это не ошибка.Вам просто нужно переопределить методы equalsTo(Object o) и compareTo(Object o) в классе Country.

После того, как вы это сделаете, все будет хорошо.

...