1

我必须<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>
4

1 回答 1

1

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

但是有一些陷阱:
1)可能应该在 bean 构造函数中设置默认值

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

3)当您从 someBean 到 selectedItem 再到 category 时,请注意 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>
于 2012-12-14T09:02:00.120 回答