数据表中的SelectOneMenu,带有空的SelectItem

时间:2015-02-23 16:16:50

标签: jsf primefaces

当我在SelectOneMenu中使用空SelectItem为我的用户在SelectOneMenu中提供空选时,它可以正常工作。正如在这个帖子中所建议的那样:Best way to add a "nothing selected" option to a selectOneMenu in JSF

但是当我在SelectOneMenu中使用一个空的SelectItem时,它存在于一个数据表中,当我在数据表中使用CellEditing时,它不会保留正确的SelectItem。

这是我的代码:

<p:dataTable id="fooTable" 
         value="#{fooSessionBean.foos}" 
         var="foo"
         rows="15" 
         style="width: 100%"
         paginator="true" 
         paginatorPosition="bottom" 
         paginatorAlwaysVisible="false"
         editable="true" >

         ...

    <p:column sortBy="#{empty foo.bar ? '' : foo.bar.name}">
        <p:cellEditor>
            <f:facet name="output"> <h:outputText value="#{foo.bar.name}" title="#{foo.bar.name}" rendered="#{!empty foo.bar}" /></f:facet>
            <f:facet name="input"> 
                <p:selectOneMenu id="bars" value="#{foo.bar}" converter="foobarConverter" style="width:100%">
                    <f:selectItem itemLabel="No bar" itemValue="#{null}" noSelectionOption="true" />
                    <f:selectItems value="#{fooSessionBean.foos}" var="bars" itemLabel="#{bars.name}" itemValue="#{bars}" />                   
                </p:selectOneMenu>
            </f:facet>
        </p:cellEditor>
    </p:column>
    ...

    <p:column style="width:10%">
    <p:rowEditor />
    <p:commandButton  action="#{fooSessionBean.delete(foo.id)}" icon="ui-icon-trash" title="remove" ajax="false"/>
</p:column>

Foo对象有一个字段Bar。当您尝试使用RowEditing编辑字段时,上面的代码会生成一个Bar项列表。 Foo对象也可能没有Bar字段。因此空的SelectItem。

这一切都有效,只是错误的Bar项目在Foo对象中持久存在。我选择的Bar对象之前的Bar对象是持久的。例如:

SelectOneMenu包含:

  • emptybar
  • BAR1
  • BAR2
  • BAR3

当您选择bar2时,bar1将保留在te foo对象中。

是否有可能在这样的地方使用不同的组件或者我忽略了别的东西?因为我发现很少有人试图这样做,并且遇到了同样的问题。

0 个答案:

没有答案