Primefaces selectOneMenu在重新打开时不会保持对所选项目的关注

时间:2012-02-13 05:55:02

标签: jsf-2 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显示预期的行为 - 它会打开,之前选择的国家/地区可见。

是否有一些技巧或这是一个错误?

它还有一个number of other quirks,它如何响应键盘输入(例如,当菜单有焦点时,按向上/向下键不打开菜单),这有点令人沮丧。

我正在使用:

  • Primefaces 3.1
  • Glassfish 3.1.1
  • NetBeans 7.1

3 个答案:

答案 0 :(得分:0)

这不是一个错误。您只需覆盖Country类中的equalsTo(Object o)compareTo(Object o)方法。

你做完之后就行了。

答案 1 :(得分:0)

如果你更新到Primefaces 3.4(目前的当前版本),你仍然有类似的行为,这是不期望的。

如果第一项具有noSelectionOption="true",您会获得相同的行为,这似乎是审核中的错误,并且会报告herehere。还有一个关于它的论坛thread

但您可以尝试使用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>

我希望它有所帮助。

答案 2 :(得分:0)

好的,这似乎已经解决了!

我使用各种版本的Primefaces进行了一些测试,结果如下:

  • 3.1 - 无效

  • 3.2 - 无法正常工作

  • 3.3 - 不起作用(先前选择的值会短暂闪烁,然后显示第一个菜单项)

  • 3.4 - 按预期工作

注意:当我从3.3升级到3.4时,我确实需要清除浏览器缓存(在Chrome和Firefox中)(在我执行此操作之前,这些项目根本无法选择)。