2 Replies Latest reply on Aug 3, 2009 11:25 AM by carlos_navarrete

    Dependent comboBox returns null

      Hi everybody I am a student in Mexico and I have a problem with comboBox and inplaceselect components of richfaces I am trying to do a dependent select but the second comboBox returns null as value.

      the code:


      view.xhtml

      <h:outputText value="Escoge tu estado:"/>
      <rich:comboBox required="true" requiredMessage="Oops no puede ser nulo" id="estadoActual" value="#{usuario.estadoActual}" valueChangeListener="#{usuario.cambio}" defaultLabel="Da Click aquÃÂ">
       <f:selectItems value="#{usuario.estados}"/>
       <a4j:support event="onselect" reRender="items, label" ajaxSingle="true"/>
       <rich:beanValidator summary="a"/>
      </rich:comboBox>
      <rich:message for="estadoActual">
       <f:facet name="passedMarker">
       <h:graphicImage value="/img/passed.gif" />
       </f:facet>
       <f:facet name="errorMarker">
       <h:graphicImage value="/img/error.gif" />
       </f:facet>
      </rich:message>
      <a4j:outputPanel id="label">
       <h:outputText value="Escoge una región:" rendered="#{!empty usuario.regionarray}"/>
      </a4j:outputPanel>
      <a4j:outputPanel id="items">
       <rich:comboBox id="regionActual" required="true" requiredMessage="Oops no puede ser nulo" value="#{usuario.regionActual}" rendered="#{!empty usuario.regionarray}" defaultLabel="Da Click aquÃÂ">
       <f:selectItems value="#{usuario.regionarray}"/>
       <rich:beanValidator summary="b"/>
       </rich:comboBox>
      </a4j:outputPanel>
      <rich:message for="regionActual">
       <f:facet name="passedMarker">
       <h:graphicImage value="/img/passed.gif" />
       </f:facet>
       <f:facet name="errorMarker">
       <h:graphicImage value="/img/error.gif" />
       </f:facet>
      </rich:message>
      


      usuario.java
      @Transient
      private Estados es=new Estados();
      @Transient
      public List<SelectItem> estados=es.getEstados();
      @Transient
      public List<SelectItem> regionarray=null;
       @Transient
       public List<SelectItem> getEstados(){
       return estados;
       }
       @Transient
       public void setEstados(List<SelectItem> estados){
       this.estados=estados;
       }
       @Transient
       public List<SelectItem> getRegionarray(){
       return regionarray;
       }
       @Transient
       public void setRegionarray(List<SelectItem> regionarray){
       this.regionarray=regionarray;
       }
       @Transient
       public void cambio(ValueChangeEvent evento){
       if (((String)evento.getNewValue()).equals("mexico")) {
       regionarray=es.getRegiones("mexico");
       }
       if (((String)evento.getNewValue()).equals("aguascalientes")) {
       regionarray=es.getRegiones("aguascalientes");
       }
       }
       public String getEstadoActual() {
       return estadoActual;
       }
      
       public void setEstadoActual(String estadoActual) {
       this.estadoActual = estadoActual;
       }
      
       public String getRegionActual() {
       return regionActual;
       }
      
       public void setRegionActual(String regionActual) {
       this.regionActual = regionActual;
       }
      



      Estados.java

      public class Estados {
       List<SelectItem> lista=new ArrayList<SelectItem>();
       List<SelectItem> lista1=new ArrayList<SelectItem>();
       SelectItem item=null;
       SelectItem item1=null;
       public List<SelectItem> getEstados(){
       item=new SelectItem("mexico","México");
       lista.add(item);
       item=new SelectItem("aguascalientes","Aguascalientes");
       lista.add(item);
       return lista;
       }
       public List<SelectItem> getRegiones(String estadoseleccionado){
       lista1.clear();
       if(estadoseleccionado.equals("mexico")){
       item1=new SelectItem("primero","Primero");
       lista1.add(item1);
       item1=new SelectItem("segundo","Segundo");
       lista1.add(item1);
       return lista1;
       }
       if(estadoseleccionado.equals("aguascalientes")){
       item1=new SelectItem("primero12","Primero12");
       lista1.add(item1);
       item1=new SelectItem("segundo12","Segundo12");
       lista1.add(item1);
       return lista1;
       }
       return null;
       }
      }
      


      registro.java (the stateful bean only for tests)

      @Stateless
      @Name("registro")
      public class Registro implements IRegistro{
       @In(required=false)
       private Usuario usuario;
       @PersistenceContext
       private EntityManager entityManager;
       public String alta(){
       System.out.println("Mayor: "+usuario.getEstadoActual());
       System.out.println("Mayor: "+usuario.getRegionActual());
       return null;
      
       }
      }
      


      The problem is that registro.java print in the console:

      Mayor: mexico
      Mayor: null

      Could anyone please help me about why regionActual is null instead of primero or segundo??

      I followed this example http://livedemo.exadel.com/richfaces-demo/richfaces/support.jsf?tab=selects&cid=2725778 so i don't know why my code doesn't work

      thank you very much for your time

        • 1. Re: Dependent comboBox returns null
          ilya_shaikovsky

          debug the cambio listener. do you considered that combobox is just input and not a select?

          • 2. Re: Dependent comboBox returns null

            Hi again thank you for your answer
            I solved the problem I think it's a problem with the lifecycle I just added this

             public List<SelectItem> getAll(){
             lista1.clear();
             item1=new SelectItem("primero","Primero");
             lista1.add(item1);
             item1=new SelectItem("segundo","Segundo");
             lista1.add(item1);
             item1=new SelectItem("primero12","Primero12");
             lista1.add(item1);
             item1=new SelectItem("segundo12","Segundo12");
             lista1.add(item1);
             return lista1;
             }
            


            and initialize

            public List<SelectItem> regionarray=es.getAll();
            


            I don't know if it could be a bug or only a feature.