如何制作p:selectOneMenu显示当前值?

时间:2012-12-13 21:13:04

标签: jsf-2 primefaces

我有<p:selectOneMenu>来选择项目的类别。默认情况下,菜单会显示所选的someBean.selectedParty.categories的第一个条目。但该项目已在someBean.selectedItem.category处具有我想要显示/选择的当前类别。我怎样才能做到这一点?

<p:selectOneMenu value="#{someBean.selectedItem.category}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{someBean.selectedParty.categories}" var="category" itemLabel="#{category.name}"/>   
</p:selectOneMenu>

1 个答案:

答案 0 :(得分:1)

只要someBean.selectedItem.category的getter返回列表中的可用值,它就会将值显示为选中。

但是有一些问题:
1)默认值可能应该在bean构造函数

中设置

2)bean(someBean)不能拥有RequestScope - 因为每个HTTP请求(包括Ajax请求)都会创建一个全新的bean实例,并将所有属性设置为default。如果您的bean是RequestScope,请更改为ViewScope

3)当您从someBean到selectedItem“级联”到类别时,请注意selectedItem和selectedParty必须相同(不仅相同的内容,而且相同的内存地址)或JSF的生命周期将停止。我猜您之前正在设置所选对象。如果您使用的是AJAX,请尝试使用下拉列表将“完整”请求发布到新页面以进行调试。

4)为简化此操作,您可以尝试将类别和类别直接移动到someBean中,以使页面看起来像

<p:selectOneMenu value="#{someBean.category}" converter="omnifaces.SelectItemsConverter">
    <f:selectItems value="#{someBean.categories}" var="category" itemLabel="#category.name}"/>    
</p:selectOneMenu>