I have a rich:pickList, when submit values it still displays error: "Validation Error: Value is not valid". I also set breakpoint to debug (getAsobject), but after system invocation I had nothing.
BalusC said that I would implement the equals() method in my entities, or I have the entities in the web service, and I fill the right side of the picklist with data from this web service.
xHTML file
            <h:form>
                <rich:panel>
                    <h:panelGrid columns="2" styleClass="criteresSaisie"
                        rowClasses="critereLigne" columnClasses="titreColonne,">
                        <h:outputLabel for="libelleComplement" value="           "
                            size="20" />
                        <rich:pickList id="libelleComplement" sourceCaption="Compléments"
                            targetCaption="Compléments sélectionnés"
                            value="#{listeCmpltDispoModel.listeCmpltSelect}" size="15"
                            addText=">" addAllText=">>" removeText="<"
                            removeAllText="<<" listWidth="270px" listHeight="110px"
                            orderable="true">
                            <f:selectItems value="#{listeCmpltDispoModel.listeCmpltDispo}"
                                var="liste" itemLabel="#{liste.libelleComplement}"
                                itemValue="#{liste}" />
                            <f:converter converterId="cmpltsTitresConcerter" />
                        </rich:pickList>
                    </h:panelGrid>
                    <h:panelGroup>
                        <div align="right">
                            <h:panelGrid columns="8">
                                <h:commandButton value="Valider"
                                    action="#{saisieCmpltsTitreCtrl.valider}" />
                            </h:panelGrid>
                        </div>
                    </h:panelGroup>
                </rich:panel>
            </h:form>
Converter
@FacesConverter(value="cmpltsTitresConcerter")
public class CmpltsTitresConcerter implements Converter
{
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
    ComplementsDispoSortieDTO cmpltSelect= new ComplementsDispoSortieDTO();
    if(value != null)
    {
        cmpltSelect.setCdComplement(Long.parseLong(value));
        //cmpltSelect.setLibelleComplement("aaa");
    }
    return cmpltSelect;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object obj)
{
    String result = null;
    if(obj != null)
    {
        result = String.valueOf(((ComplementsDispoSortieDTO) obj).getCdComplement());
    }
    return result;
}
}
Model
@ManagedBean(name = "listeCmpltDispoModel")
@SessionScoped
public class ListeCmpltDispoModel implements Serializable {
private static final long serialVersionUID = 1L;
private Long cdComplement;
private String libelleComplement;
private int nbCompl;
private List<ComplementsDispoSortieDTO> listeCmpltDispo ;
private List<ComplementsDispoSortieDTO> listeCmpltSelect ;
public ListeCmpltDispoModel() {
}
public Long getCodeComplement() {
    return cdComplement;
}
public void setCodeComplement(Long cdComplement) {
    this.cdComplement = cdComplement;
}
public String getLibelleComplement1() {
    return libelleComplement;
}
public void setLibelleComplement1(String libelleCoplement) {
    this.libelleComplement = libelleCoplement;
}
public Long getCdComplement() {
    return cdComplement;
}
public void setCdComplement(Long cdComplement) {
    this.cdComplement = cdComplement;
}
public String getLibelleComplement() {
    return libelleComplement;
}
public void setLibelleComplement(String libelleComplement) {
    this.libelleComplement = libelleComplement;
}
public List<ComplementsDispoSortieDTO> getListeCmpltDispo() {
    return listeCmpltDispo;
}
public void setListeCmpltDispo(List<ComplementsDispoSortieDTO> listeCmpltDispo) {
    this.listeCmpltDispo = listeCmpltDispo;
}
public int getNbCompl() {
    return nbCompl;
}
public void setNbCompl(int nbCompl) {
    this.nbCompl = nbCompl;
}
public List<ComplementsDispoSortieDTO> getListeCmpltSelect() {
    return listeCmpltSelect;
}
public void setListeCmpltSelect(List<ComplementsDispoSortieDTO> listeCmpltSelect) {
    this.listeCmpltSelect = listeCmpltSelect;
}
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
            + ((cdComplement == null) ? 0 : cdComplement.hashCode());
    result = prime
            * result
            + ((libelleComplement == null) ? 0 : libelleComplement
                    .hashCode());
    result = prime * result
            + ((listeCmpltDispo == null) ? 0 : listeCmpltDispo.hashCode());
    result = prime
            * result
            + ((listeCmpltSelect == null) ? 0 : listeCmpltSelect.hashCode());
    result = prime * result + nbCompl;
    return result;
}
@Override
public boolean equals(Object obj){
    if(!(obj instanceof ComplementsDispoSortieDTO)){
        return false;
    }
    return ((ComplementsDispoSortieDTO)obj).getCdComplement()==this.cdComplement;
}
}
 
     
     
    