SelectOneMenu dependent on Primefaces

0

I have a database with 4 tables (Application, Province, Municipality, Town) where I have to add an application. I create 3 SelectOneMenu dependent to choose the Province depending on what is selected, the SelectOneMenu of Municipality must be updated and this must happen with Peoples, but when a Municipality is selected, Pueblo is not updated. If you can help me, I appreciate it. This is my code

            <h:form id="form">
                <p:commandButton icon="ui-icon-plusthick" id="addSolicBtn" value="Añadir solicitud"  update=":solicDetail1" ajax="true" 
                                 oncomplete="PF('$solicDetail1').show()" style="margin-left: 10px;" /> 
            </h:form>
            <p:dialog id="solicDetail1" widgetVar="$solicDetail1" header="Añadir solicitud" hideEffect="explode" appendTo="@(body)" 
                      resizable="false" draggable="false" closeOnEscape="true" modal="true"> 
                <h:form id="formDialog">  
                    <p:growl id="msgs" showDetail="true"/>
                    <p:panelGrid columns="2"> 
                        <h:outputLabel for="nomb_pers" value="Nombre de la persona: *" />  
                        <p:inputText id="nomb_pers" value="#{solicitudManagedBean.selectsolicitud.nomb_pers}" 
                                     label="Nombre" placeholder="Nombre y Apellidos" style="width:135px"> 
                            <p:keyFilter regEx="/[A-Z .\á-ú]/i"/>
                        </p:inputText>

                        <h:outputLabel for="ci" value="Carnet de identidad: *" />  
                        <p:inputMask id="ci" value="#{solicitudManagedBean.selectsolicitud.ci}" mask="99999999999" 
                                     placeholder="Carnet de identidad" style="width:135px"/>  

                        <h:outputLabel for="direccion" value="Dirección: *" />  
                        <p:inputText id="direccion" value="#{solicitudManagedBean.selectsolicitud.direccion}" 
                                     label="direccion" placeholder="Dirección" style="width:135px"/> 

                        <h:outputLabel for="telefono" value="Teléfono: "/>   
                        <p:inputText id="telefono" value="#{solicitudManagedBean.selectsolicitud.telefono}" 
                                     label="Nombre" placeholder="Número de teléfono" style="width:135px">
                            <p:keyFilter regEx="/[\d\-]/"/>
                        </p:inputText>

                        <h:outputLabel for="fecha" value="Fecha de solicitud: *"/>
                        <p:calendar id="fecha" value="#{solicitudManagedBean.selectsolicitud.fecha}"  pattern="yyyy-MM-dd"
                                    navigator="true" mode="popup" placeholder="Fecha de solicitud" locale="es"
                                    style="width:500px"/>

                        <h:outputLabel for="tipo_afect" value="Tipo de afectación: *" />  
                        <p:inputText id="tipo_afect" value="#{solicitudManagedBean.selectsolicitud.tipo_afect}" 
                                     label="tipo_afectación" placeholder="Tipo de afectación" style="width:135px"/> 

                        <h:outputLabel for="cult_danado" value="Cultivo dañado: *" />  
                        <p:inputText id="cult_danado" value="#{solicitudManagedBean.selectsolicitud.cult_danado}" 
                                     label="cultivo_dañado" placeholder="Cultivo dañado" style="width:135px"/> 

                        <h:outputLabel for="zona_afect" value="Zona afectada: *" />  
                        <p:inputText id="zona_afect" value="#{solicitudManagedBean.selectsolicitud.zona_afect}" 
                                     label="zona_afectada" placeholder="Zona afectada" style="width:135px" />                                             

                        <h:outputLabel for="provlist" value="Provincia: *"/>
                        <p:selectOneMenu id="provlist" value="#{solicitudManagedBean.selectprov}" style="width:130px">
                            <f:selectItem itemLabel="Seleccione la provincia" itemValue="" noSelectionOption="true" />
                            <f:selectItems value="#{solicitudManagedBean.selectItemsOneProvincia}" />
                            <p:ajax update="munlist"/>
                        </p:selectOneMenu>

                        <h:outputLabel for="munlist" value="Municipio: *"/>
                        <p:selectOneMenu id="munlist" value="#{solicitudManagedBean.selectmun}" style="width:130px">
                            <f:selectItem itemLabel="Seleccione el municipio" itemValue="" noSelectionOption="true" />
                            <f:selectItems value="#{solicitudManagedBean.selectItemsOneMunicipio}" />
                            <p:ajax update="pueblolist"/>
                        </p:selectOneMenu>

                        <h:outputLabel for="pueblolist" value="Pueblo: *"/>
                        <p:row> 
                            <p:column>
                                <p:selectOneMenu id="pueblolist" value="#{solicitudManagedBean.selectpueblo}" style="width:130px; margin-top: 10px" required="true" >
                                    <f:selectItem itemLabel="Seleccione el pueblo" itemValue="" noSelectionOption="true" />
                                    <f:selectItems value="#{solicitudManagedBean.selectItemsOnePueblo}" />
                                    <p:ajax update="pueblolist"/>
                                </p:selectOneMenu>

                            </p:column>
                        </p:row>
                        <p:commandButton value="Añadir" process="@form" id="AddButtonId" ajax="true" icon="ui-icon-plus" 
                                         update=":formDialog:msgs" actionListener="#{solicitudManagedBean.addSolicitud()}" />  


                    </p:panelGrid>  
                </h:form>
            </p:dialog>


            @ManagedBean
            @RequestScoped
            public class SolicitudManagedBean {

            /**
             * Creates a new instance of SolicitudManagedBean
             */
                private String selectprov;
                private String selectmun;
                private String selectpueblo;
                private List<SelectItem> selectItemsOneProvincia;
                private List<SelectItem> selectItemsOneMunicipio;
                private List<SelectItem> selectItemsOnePueblo;
                private Solicitud selectsolicitud;
                private final PuebloDAO pbdao = new PuebloDAO();


                public SolicitudManagedBean() {
                }

                public String getSelectprov() {
                    return selectprov;
                }

                public void setSelectprov(String selectprov) {
                    this.selectprov = selectprov;
                }

                public String getSelectmun() {
                    return selectmun;
                }

                public void setSelectmun(String selectmun) {
                    this.selectmun = selectmun;
                }

                public List<SelectItem> getSelectItemsOneProvincia() {
                    this.selectItemsOneProvincia = new ArrayList<>();
                    UbisolicDAO udao = new UbisolicDAO();
                    List<Provincia> provincias = udao.allProv();
                    selectItemsOneProvincia.clear();
                    for (Provincia provincia : provincias) {
                        SelectItem selectItem = new SelectItem(provincia.getId(), provincia.getNomb_prov());
                        this.selectItemsOneProvincia.add(selectItem);
                    }
                    System.out.println("Se cargaron provincias: " + selectItemsOneProvincia.size());
                    return selectItemsOneProvincia;
                }

                public void setSelectItemsOneProvincia(List<SelectItem> selectItemsOneProvincia) {
                    this.selectItemsOneProvincia = selectItemsOneProvincia;
                }

                public List<SelectItem> getSelectItemsOneMunicipio() {
                    if (selectprov != null && !selectprov.equals("")) {
                        this.selectItemsOneMunicipio = new ArrayList<>();
                        UbisolicDAO udao = new UbisolicDAO();
                        List<Municipio> municipios = udao.listMunicipios(selectprov);
                        selectItemsOneMunicipio.clear();
                        for (Municipio municipio : municipios) {
                            SelectItem selectItem = new SelectItem(municipio.getId(), municipio.getNomb_mun());
                            this.selectItemsOneMunicipio.add(selectItem);
                        }
                        System.out.println("Se cargaron municipios: " + selectItemsOneMunicipio.size());

                    } else {
                        this.selectItemsOneMunicipio = new ArrayList<>();
                    }

                    return selectItemsOneMunicipio;
                }

                public void setSelectItemsOneMunicipio(List<SelectItem> selectItemsOneMunicipio) {
                    this.selectItemsOneMunicipio = selectItemsOneMunicipio;
                }

                public List<SelectItem> getSelectItemsOnePueblo() {
                    if (selectprov != null && !selectprov.equals("")
                            && selectmun != null && !selectmun.equals("")) {
                        this.selectItemsOnePueblo = new ArrayList<>();
                        UbisolicDAO udao = new UbisolicDAO();
                        List<Pueblo> pueblos = udao.listPueblos(selectmun, selectprov);
                        selectItemsOnePueblo.clear();
                        for (Pueblo pueblo : pueblos) {
                            SelectItem selectItem = new SelectItem(pueblo.getId(), pueblo.getNomb_pueb());
                            this.selectItemsOnePueblo.add(selectItem);
                        }
                        System.out.println("Se cargaron pueblos: " + selectItemsOnePueblo.size());

                    } else {
                        this.selectItemsOnePueblo = new ArrayList<>();
                    }

                    return selectItemsOnePueblo;
                }

                public void setSelectItemsOnePueblo(List<SelectItem> selectItemsOnePueblo) {
                    this.selectItemsOnePueblo = selectItemsOnePueblo;
                }

                public Solicitud getSelectsolicitud() {
                    return selectsolicitud;
                }

                public void setSelectsolicitud(Solicitud selectsolicitud) {
                    this.selectsolicitud = selectsolicitud;
                }

                public String getSelectpueblo() {
                    return selectpueblo;
                }

                public void setSelectpueblo(String selectpueblo) {
                    this.selectpueblo = selectpueblo;
                }

                public void addSolicitud() throws ParseException {
                    SolicitudDAO sdao = new SolicitudDAO();
                    String msg;
                    long id_pueb = pbdao.getIdPueblo(selectpueblo).get(0);
                    if (sdao.addSolicitud(this.selectsolicitud)) {

                        msg = "Los datos se añadieron correctamente";
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, " ");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                    } else {
                        msg = "Error añadiendo el registro";
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, " ");
                        FacesContext.getCurrentInstance().addMessage(null, message);
                    }
                    selectsolicitud = new Solicitud();
                }

            }
    
asked by Jenice 23.02.2018 в 15:13
source

1 answer

0

The problem is in the update (update="munlist") because in the bean you are not getting the value selectprov change your update as follows:

                        <p:selectOneMenu id="provlist" value="#{solicitudManagedBean.selectprov}" style="width:130px">
                            <f:selectItem itemLabel="Seleccione la provincia" itemValue="" noSelectionOption="true" />
                            <f:selectItems value="#{solicitudManagedBean.selectItemsOneProvincia}" />
                            <p:ajax update="formDialog"/>
                        </p:selectOneMenu>

Or with process="@ form" or this as well:

  <p:selectOneMenu id="provlist" value="#{solicitudManagedBean.selectprov}" style="width:130px">
                                <f:selectItem itemLabel="Seleccione la provincia" itemValue="" noSelectionOption="true" />
                                <f:selectItems value="#{solicitudManagedBean.selectItemsOneProvincia}" />
                                <p:ajax update="munlist" process="@form" />
                            </p:selectOneMenu>

Or simply an update to the two components like this:

   <p:selectOneMenu id="provlist" value="#{solicitudManagedBean.selectprov}" style="width:130px">
                                    <f:selectItem itemLabel="Seleccione la provincia" itemValue="" noSelectionOption="true" />
                                    <f:selectItems value="#{solicitudManagedBean.selectItemsOneProvincia}" />
                                    <p:ajax update="munlist provlist" />
                                </p:selectOneMenu>

This will be in others selectOneMenu

And one last advice is that they were not getting the methods and you could do the following to send them to call when you need them for example:

       <p:selectOneMenu id="provlist" value="#{solicitudManagedBean.selectprov}" style="width:130px">
                                        <f:selectItem itemLabel="Seleccione la provincia" itemValue="" noSelectionOption="true" />
                                        <f:selectItems value="#{solicitudManagedBean.selectItemsOneProvincia}" />
                                        <p:ajax event="change" update="munlist provlist" listener="#{solicitudManagedBean.selectItemsOneMunicipio}"  />
                                    </p:selectOneMenu>

               public List<SelectItem> selectItemsOneMunicipio() {
                    if (selectprov != null && !selectprov.equals("")) {
                        this.selectItemsOneMunicipio = new ArrayList<>();
                        UbisolicDAO udao = new UbisolicDAO();
                        List<Municipio> municipios = udao.listMunicipios(selectprov);
                        selectItemsOneMunicipio.clear();
                        for (Municipio municipio : municipios) {
                            SelectItem selectItem = new SelectItem(municipio.getId(), municipio.getNomb_mun());
                            this.selectItemsOneMunicipio.add(selectItem);
                        }
                        System.out.println("Se cargaron municipios: " + selectItemsOneMunicipio.size());

                    } else {
                        this.selectItemsOneMunicipio = new ArrayList<>();
                    }

                    return selectItemsOneMunicipio;
                }
    
answered by 23.02.2018 в 16:40