Primefaces selectOneMenu не запазва фокуса върху избрания елемент при повторно отваряне

Компонентът 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 показва очакваното поведение - отваря се с видима предварително избрана държава.

Има ли някакъв трик за това или това е грешка?

Освен това има редица други странности с начина, по който реагира на въвеждане от клавиатурата (натискането нагоре/надолу, когато менюто има фокус, не отваря менюто, например), което е малко разочароващо.

Аз използвам:

  • Основни лица 3.1
  • Стъклена риба 3.1.1
  • NetBeans 7.1

person James Bassett    schedule 13.02.2012    source източник
comment
Е, това очевидно е грешка (поне липса на функция) в PrimeFaces и вероятно вече сте наясно с това. Тук не можем да направим много за вас, освен да ви предложим да съобщите за грешка там или да пренапишете/замените програмата за изобразяване и/или JavaScript.   -  person BalusC    schedule 13.02.2012
comment
За информация, можете да търсите и/или докладвате за проблеми с Primefaces тук: code.google.com /p/primefaces/issues/list   -  person maple_shaft    schedule 13.02.2012
comment
@maple_shaft Да, погледнах, преди да публикувам този въпрос, но няма текущи проблеми, свързани с това. Просто исках да се уверя, че наистина е грешка, преди да публикувам проблем.   -  person James Bassett    schedule 14.02.2012
comment
Добре, все още се случва в 3.4, така че повдигнах проблем   -  person James Bassett    schedule 27.09.2012


Отговори (3)


Не е бъг. Просто трябва да замените методите equalsTo(Object o) и compareTo(Object o) в клас Country.

Ще работи добре, след като го направите.

person skouda    schedule 30.03.2012
comment
Това не обяснява защо работи в h:selectOneMenu. compareTo() е ненужен, няма да се използва. equalsTo() не съществува, предполагам, че имате предвид equals(). Но ако това липсваше или беше приложено лошо, h:selectOneMenu също щеше да се провали. - person BalusC; 30.03.2012
comment
Абсолютно същият проблем може да се види във витрината на Primefaces (примерът „pojo“ в primefaces. org/showcase/ui/selectOneMenu.jsf). Някой ден ще докладвам. О, и BalusC - благодаря за неуморния ви SO отговор, почти всяка полезна JSF статия, която намеря, съдържа някъде името ви! - person James Bassett; 31.03.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>

Надявам се да помогне.

person rbento    schedule 25.09.2012
comment
Тези проблеми изглеждат несвързани и itemDisabled няма значение. Повдигнах проблем, така че се надявам скоро да се оправи :) - person James Bassett; 27.09.2012

Добре, това изглежда е поправено!

Проведох няколко теста с различни версии на Primefaces със следните резултати:

  • 3.1 - не работи

  • 3.2 - не работи

  • 3.3 - не работи (избраната преди това стойност мига за кратко, след което се показва първият елемент от менюто)

  • 3.4 - работи според очакванията

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

person James Bassett    schedule 26.11.2012