Taieb Baccouche
Taieb Baccouche

Reputation: 217

selectOneMenu validation error

I implemented code that allows me to display a dropdown which depends on another. Everything works fine except when I try to retrieve and display the value of the two fields, it raises the following error:

form:parcours : erreur : de validation. la valeur est incrorrecte

in english :

form:parcours : validation error. value is not valid

I am using JSF 2.0, EJB 3.0, JPA 2.0 and PrimeFaces 3.2.

View:

    <h:form id="form" >

<!-- <p:growl id="msgs" showDetail="true"/> -->
<h:messages globalOnly="true"/>
<p:growl   id="msgs" showDetail="true" />


<p:panel header="Double Combo" style="margin-bottom:10px;">
    <h:panelGrid columns="2" cellpadding="5">

        <p:selectOneMenu id="countries" value="#{plansEtude.selectedDep}">
            <f:selectItem itemLabel="Select Country" itemValue="" />
            <f:selectItems value="#{plansEtude.depList}" var="c" itemLabel="#{c.nomDepFr}" itemValue="#{c.id}"/>
            <p:ajax update="parcours,parcoursTab"
                    listener="#{plansEtude.handleDepChange}" />
        </p:selectOneMenu>
        <p:selectOneMenu id="parcours" value="#{plansEtude.selectedParcours}" >
            <f:convertNumber maxFractionDigits="0"/>
            <f:selectItem itemLabel="Select City" itemValue="" />
            <f:selectItems value="#{plansEtude.parcoursList}" var="ct" itemLabel="#{ct.designParcours}" itemValue="#{ct.id}"   />

        </p:selectOneMenu>

    </h:panelGrid>
    <p:separator />

        <p:commandButton value="Submit" update="msgs" actionListener="#{plansEtude.displayLocation}" id="btnSubmit"/>

    </p:panel>

Controller :

@EJB
private DepartementFacade departementFacade;
@EJB
private ParcoursFacade parcoursFacade;
private List<Departement> depList;
private List<Parcours> parcoursList;
private Integer selectedDep;
private Integer selectedParcours;


public PlansEtude() {
}

public DepartementFacade getDepartementFacade() {
    return departementFacade;
}

public void setDepartementFacade(DepartementFacade departementFacade) {
    this.departementFacade = departementFacade;
}

public ParcoursFacade getParcoursFacade() {
    return parcoursFacade;
}

public void setParcoursFacade(ParcoursFacade parcoursFacade) {
    this.parcoursFacade = parcoursFacade;
}

public List<Departement> getDepList() {
    depList = getDepartementFacade().findAll();
    return depList;
}

public void setDepList(List<Departement> depList) {

    this.depList = depList;
}

public List<Parcours> getParcoursList() {
    return parcoursList;
}

public void setParcoursList(List<Parcours> parcoursList) {
    this.parcoursList = parcoursList;
}

public Integer getSelectedDep() {
    return selectedDep;
}

public void setSelectedDep(Integer selectedDep) {
    this.selectedDep = selectedDep;
}

public Integer getSelectedParcours() {
    return selectedParcours;
}

public void setSelectedParcours(Integer selectedParcours) {
    this.selectedParcours = selectedParcours;
}

public void handleDepChange(){
     if(selectedDep !=null && !selectedDep.equals(""))  

       parcoursList = parcoursFacade.findParcoursInDep(selectedDep);  
   else  
        parcoursList = new ArrayList<Parcours>();

}

public void handleParcoursChange(){

}

public void displayLocation() {  
    String monMessage="Departement :" + selectedDep + ", Parcours : " + selectedParcours;
    FacesMessage msg = new FacesMessage("Selected", monMessage);  

    FacesContext.getCurrentInstance().addMessage(null, msg);  
}

}

parcoursFacade :

 public List<Parcours> findParcoursInDep(Integer dep){
    Query query = em.createNamedQuery("Parcours.findParcoursInDep");
    query.setParameter("dep", dep);
    return (List<Parcours>)query.getResultList();
}

Named query :

     @NamedQuery(name = "Parcours.findParcoursInDep", query = "SELECT p FROM Parcours p WHERE p.departementid.id = :dep"),

Upvotes: 0

Views: 1811

Answers (1)

BalusC
BalusC

Reputation: 1109635

Remove the <f:convertNumber maxFractionDigits="0"/> from your parcours dropdown. It makes no sense. It would only convert the number to BigDecimal while you need an Integer.

Another possible cause is that the #{plansEtude.parcoursList} has incompatibly changed during the form submit because the managed bean is request scoped. You need to make sure that the managed bean is placed in at least the view scope, so that the parcoursList is preserved for the submit.

Upvotes: 2

Related Questions