-  
		
			Available since OmniFaces 1.0
		The omnifaces.ListIndexConverter is a variant of the ListConverter which automatically converts based on the position (index) of the selected item in the list instead of the Object.toString() of the selected item.
Usage
This converter is available by converter ID omnifaces.ListIndexConverter 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.ListIndexConverter" list="#{bean.dualListModel.source}" />
</p:pickList>
 Since OmniFaces 4.5 it's also available by <o:listIndexConverter> tag.
<p:pickList value="#{bean.dualListModel}" var="entity" itemValue="#{entity}" itemLabel="#{entity.someProperty}">
    <o:listIndexConverter" list="#{bean.dualListModel.source}" />
</p:pickList>
 Pros and cons as compared to ListConverter
 For detail, refer the javadoc of SelectItemsIndexConverter and substitute "SelectItemsIndexConverter" by "ListIndexConverter" and "SelectItemsConverter" by "ListConverter".
			The demo below shows the PrimeFaces 
			<p:pickList>
			component, which is a famous example of a component that does not use select items.
		
			Another example of such a PrimeFaces component is the
			<p:autoComplete>.
		
<p>
    The demo below shows the PrimeFaces 
    <a href="https://primefaces.org/showcase/ui/data/pickList.xhtml"><code><p:pickList></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.ListIndexConverter" 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><p:autoComplete></code></a>.
</p>
<h:form>
    <p:autoComplete value="#{autoCompleteBean.selectedEntity}" completeMethod="#{autoCompleteBean.autoComplete}" 
        var="entity" itemValue="#{entity}" itemLabel="#{entity.value}">
        <o:converter converterId="omnifaces.ListIndexConverter" 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>package org.omnifaces.showcase.converters;
import static java.util.Arrays.asList;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Named;
import org.omnifaces.cdi.ViewScoped;
import org.omnifaces.showcase.model.ExampleEntity;
import org.primefaces.model.DualListModel;
@Named
@ViewScoped
public class SelectListBean implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<ExampleEntity> fullList;
    private DualListModel<ExampleEntity> model;
    @PostConstruct
    public void init() {
        fullList = asList(
            new ExampleEntity(1l, "Amsterdam"),
            new ExampleEntity(2l, "Frankfurt"),
            new ExampleEntity(3l, "Berlin")
        );
        model = new DualListModel<>(
            new ArrayList<>(fullList),
            new ArrayList<ExampleEntity>()
        );
    }
    public List<ExampleEntity> getFullList() {
        return fullList;
    }
    public DualListModel<ExampleEntity> getModel() {
        return model;
    }
    public void setModel(DualListModel<ExampleEntity> model) {
        this.model = model;
    }
}package org.omnifaces.showcase.model;
import java.io.Serializable;
public class ExampleEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    private String value;
    public ExampleEntity() {
        //
    }
    public ExampleEntity(Long id, String value) {
        this.id = id;
        this.value = value;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public boolean equals(Object other) {
        return (other instanceof ExampleEntity) && (id != null)
            ? id.equals(((ExampleEntity) other).id)
            : (other == this);
    }
    @Override
    public int hashCode() {
        return (id != null)
            ? (this.getClass().hashCode() + id.hashCode())
            : super.hashCode();
    }
    @Override
    public String toString() {
        return String.format("ExampleEntity[%d, %s]", id, value);
    }
}