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,它如何响应键盘输入(例如,当菜单有焦点时,按向上/向下键不打开菜单),这有点令人沮丧。
我正在使用:
答案 0 :(得分:0)
这不是一个错误。您只需覆盖Country类中的equalsTo(Object o)
和compareTo(Object o)
方法。
你做完之后就行了。
答案 1 :(得分:0)
如果你更新到Primefaces 3.4(目前的当前版本),你仍然有类似的行为,这是不期望的。
如果第一项具有noSelectionOption="true"
,您会获得相同的行为,这似乎是审核中的错误,并且会报告here和here。还有一个关于它的论坛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中)(在我执行此操作之前,这些项目根本无法选择)。