3

Primefacesp: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>

我从列表中选择一个国家,然后再次单击菜单,它从头开始显示国家列表。它确实保留了选定的国家 - 它只是不会向下滚动并专注于它。

标准 JSFh:selectOneMenu显示预期的行为 - 它打开时显示先前选择的国家/地区。

这有什么技巧还是这是一个错误?

它在如何响应键盘输入方面也有许多其他怪癖(例如,当菜单具有焦点时按向上/向下键不会打开菜单),这有点令人沮丧。

我在用着:

  • Primefaces 3.1
  • 玻璃鱼 3.1.1
  • NetBeans 7.1
4

3 回答 3

0

如果您更新到 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>

我希望它有所帮助。

于 2012-09-25T19:22:21.373 回答
0

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

完成后它会正常工作。

于 2012-03-30T08:35:31.060 回答
0

好的,这似乎已修复!

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

  • 3.1 - 没用

  • 3.2 - 没用

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

  • 3.4 - 按预期工作

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

于 2012-11-26T23:18:26.953 回答