- 

Available since OmniFaces 1.5

The omnifaces.ListConverter is intented for use in specialized selection components which doesn't use SelectItems as the source for their selectable items, but work directly via a List of entities, and therefore the SelectItemsConverter isn't usable on them.

This converter allows you to populate a selection component with complex Java objects and have Faces convert those automatically back without the need to provide a custom converter which may need to do the job based on possibly expensive service/DAO operations. This converter automatically converts based on the Object.toString() of the selected item.

Usage

This converter is available by converter ID omnifaces.ListConverter and should be used in combination with <o:converter> in order to be able to pass the List source to it, which it can use for conversion. Here's a basic usage example with PrimeFaces <p:pickList>, which is one of the few select components which doesn't use SelectItems as the source, but work directly via a List.

<p:pickList value="#{bean.dualListModel}" var="entity" itemValue="#{entity}" itemLabel="#{entity.someProperty}">
    <o:converter converterId="omnifaces.ListConverter" list="#{bean.dualListModel.source}" />
</p:pickList>

Make sure that your entity has a good toString() implementation

For detail, refer the javadoc of SelectItemsConverter and substitute "SelectItemsConverter" by "ListConverter" and "SelectItemsIndexConverter" by "ListIndexConverter".

Demo

The demo below shows the PrimeFaces <p:pickList> component, which is a famous example of a component that does not use select items.

Choose a city, then press Select:

Selected items: [no selection made]

Another example of such a PrimeFaces component is the <p:autoComplete>.

Selected item: [no selection made]

Demo source code
<p>
    The demo below shows the PrimeFaces 
    <a href="https://primefaces.org/showcase/ui/data/pickList.xhtml"><code>&lt;p:pickList&gt;</code></a>
    component, which is a famous example of a component that does not use select items.
</p>

<h:form>
    <p>
        <b>Choose a city, then press Select</b>:
        <p:pickList value="#{selectListBean.model}" var="entity" itemValue="#{entity}" itemLabel="#{entity.value}">
            <o:converter converterId="omnifaces.ListConverter" list="#{selectListBean.fullList}" />
        </p:pickList>
    </p>

    <p>
        <h:commandButton value="Select">
            <f:ajax execute="@form" render="@form"/>
        </h:commandButton>
        <b>Selected items</b>:
        <ui:repeat value="#{selectListBean.model.target}" var="entity" varStatus="loop">
            #{entity.value}#{loop.last ? '' : ', '}
        </ui:repeat>
        <h:outputText value="[no selection made]" rendered="#{empty selectListBean.model.target}"/>
    </p>
</h:form>

<p>
    Another example of such a PrimeFaces component is the
    <a href="https://primefaces.org/showcase/ui/input/autoComplete.xhtml"><code>&lt;p:autoComplete&gt;</code></a>.
</p>

<h:form>
    <p:autoComplete value="#{autoCompleteBean.selectedEntity}" completeMethod="#{autoCompleteBean.autoComplete}" 
        var="entity" itemValue="#{entity}" itemLabel="#{entity.value}">
        <o:converter converterId="omnifaces.ListConverter" list="#{autoCompleteBean.availableEntities}" />
    </p:autoComplete>
    <p>
        <h:commandButton value="Select">
            <f:ajax execute="@form" render="@form"/>
        </h:commandButton>
        <b>Selected item</b>: #{autoCompleteBean.selectedEntity.value}
        <h:outputText value="[no selection made]" rendered="#{empty autoCompleteBean.selectedEntity}"/>
    </p>
</h:form>
Documentation & Sources