I know this is a common error, and that there is a lots of questions about it, i tired to implement from many places , i will introduce the major error.
Screenshot Here i want to select a client & a product from selectOneMenu with and insert them to another Table with other inputs as you can see here the client and the products are selected but when i try to add it returns as exeption Value is required ! i tried to solve the problem with this :
Validation Error: Value is not valid
Here is my jsf page:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://xmlns.jcp.org/jsf/html"
          xmlns:f="http://xmlns.jcp.org/jsf/core">
        <h:head>
            <title>Facelet Title</title>
        </h:head>
        <h:body>
            <f:view>
                <h:form>
                    <h1><h:outputText value="Create/Edit"/></h1>
                    <h:panelGrid columns="2">
                        <h:outputLabel value="Client:" for="client" />
                        <h:selectOneMenu id="client" value="#{recBean.rec.client}" converter="#{clientConverter}" title="Client" required="true" >
                            <!-- TODO: fixed -->
                            <f:selectItems value="#{CliBean.lister()}" var="C" itemLabel="#{C.nomCli}" itemValue="#{C}"  />
                        </h:selectOneMenu>
                        <h:outputLabel value="Produit:" for="produit" />
                        <h:selectOneMenu id="produit" value="#{recBean.rec.produit}" converter="#{produitConverter}" title="Produit" required="true" >
                            <!-- TODO: fixed -->
                            <f:selectItems value="#{proBean.lister()}" var="P" itemLabel="#{P.libProd}" itemValue="#{P}"/>
                        </h:selectOneMenu>
                        <h:outputLabel value="DateCreRec:" for="dateCreRec" />
                        <h:inputText id="dateCreRec" value="#{recBean.rec.dateCreRec}" title="DateCreRec" required="true" requiredMessage="The DateCreRec field is required.">
                            <f:convertDateTime pattern="MM/dd/yyyy" />
                        </h:inputText>
                        <h:outputLabel value="TypeRec:" for="typeRec" />
                        <h:inputText id="typeRec" value="#{recBean.rec.typeRec}" title="TypeRec" required="true" requiredMessage="The TypeRec field is required."/>
                        <h:outputLabel value="DescCli:" for="descCli" />
                        <h:inputText id="descCli" value="#{recBean.rec.descCli}" title="DescCli" required="true" requiredMessage="The DescCli field is required."/>
                        <h:outputLabel value="Situation:" for="situation" />
                        <h:inputText id="situation" value="#{recBean.rec.situation}" title="Situation" required="true" requiredMessage="The Situation field is required."/>
                        <h:outputLabel value="PersEstim:" for="persEstim" />
                        <h:inputText id="persEstim" value="#{recBean.rec.persEstim}" title="PersEstim" required="true" requiredMessage="The PersEstim field is required."/>
                        <h:outputLabel value="Estimation:" for="estimation" />
                        <h:inputText id="estimation" value="#{recBean.rec.estimation}" title="Estimation" required="true" requiredMessage="The Estimation field is required."/>
                        <h:outputLabel value="DegUrgence:" for="degUrgence" />
                        <h:inputText id="degUrgence" value="#{recBean.rec.degUrgence}" title="DegUrgence" required="true" requiredMessage="The DegUrgence field is required."/>
                        <h:outputLabel value="DescExpert:" for="descExpert" />
                        <h:inputText id="descExpert" value="#{recBean.rec.descExpert}" title="DescExpert" required="true" requiredMessage="The DescExpert field is required."/>
                        <h:outputLabel value="DateDebut:" for="dateDebut" />
                        <h:inputText id="dateDebut" value="#{recBean.rec.dateDebut}" title="DateDebut" required="true" requiredMessage="The DateDebut field is required.">
                            <f:convertDateTime pattern="MM/dd/yyyy" />
                        </h:inputText>
                        <h:outputLabel value="DateFin:" for="dateFin" />
                        <h:inputText id="dateFin" value="#{recBean.rec.dateFin}" title="DateFin" required="true" requiredMessage="The DateFin field is required.">
                            <f:convertDateTime pattern="MM/dd/yyyy" />
                        </h:inputText>
                        <h:commandButton value="Add" action="#{recBean.ajouter()}"/>
                    </h:panelGrid>
                </h:form>
            </f:view>
        </h:body>
    </html>
Here is managed bean:
@ManagedBean(name="CliBean")
@SessionScoped
public class ClientBean {
   ClientDAO dao = new ClientDAOImpl();
   public Client cli = new Client();
    private String logcli;
    public Client getCli() {
        return cli;
    }
    public void setCli(Client cli) {
        this.cli = cli;
    }
    public List<Client> lister(){
        return dao.findAll();
    }
 @Override
public String toString() {
    return String.valueOf(cli.getIdCli());
}
    public String LoginCheck(){
     Session ses = HibernateUtil.getSession();
     SessionFactory fac = HibernateUtil.getSessionFactory();
     ses.getTransaction();
             List<Client> list = ses.createSQLQuery("select * from client where login_cli='" + cli.getLoginCli() + "' and pwd_cli='" + cli.getPwdCli() + "'").list();
             if (list.size() > 0) {
                 //servlet session part
                 logcli = cli.getLoginCli();
                 HttpSession hs = sessionUtil.getSession();
                 hs.setAttribute("logcli",logcli);
                 //servlet session part
                 //BootFaces
                 FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Congratulations! You've successfully logged in.");
                 FacesContext.getCurrentInstance().addMessage("loginForm:password", msg);
                 //BootFaces
            return "/success.xhtml?faces-redirect=true";
        } else {
                //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "client not found", ""));
                //BootFaces
                FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "client not found !");
                FacesContext.getCurrentInstance().addMessage("loginForm:password", msg);
                //BootFaces
               }
        try {
            ses.getTransaction().commit();
        } catch (Exception e) {
        }
        ses.close();
        return null;
        }
    public String afflogin(){
        return logcli;
         }
    public String doLogout(){
        HttpSession hs = sessionUtil.getSession();
        hs.invalidate();
        return "/index.xhtml";
         }
                        }
And finally converter:
@ManagedBean
@RequestScoped
@FacesConverter(forClass=Client.class)
public class ClientConverter implements Converter{
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String codeString) {
    if (codeString == null && codeString.trim().length() > 0) {
        Integer code = Integer.valueOf(codeString);
        ClientServicesImpl clientServicesImpl = new ClientServicesImpl();
        return clientServicesImpl.searchForCode(code);
    }
return null;
}
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object clientObject) {
    if (clientObject == null) {
        return "";
    }
    if (clientObject instanceof Client) {
        Client client = (Client) clientObject;
        return client.getIdCli().toString();
        //return client.getIdCli() != null ? String.valueOf(client.getIdCli()) : null;
        //return String.valueOf(((Client) clientObject).getIdCli());
    } else {
        throw new ConverterException(new FacesMessage(clientObject + " is not a valid Client"));
    }
    }
}
Note that : equals()& hashCode() have been generated for entities client and product .
i think the major problem is from the converter . also i saw almost all the posts about selectOneMenu before i post my question. i wasted 3 days for this i dont want to waste more time
 
    