Primefaces 3.4 ajax com selectOneMenu (RESOLVIDO)

3 respostas
L

Boa tarde a todos! Estou com a seguinte situação: Tenho um 1 selectoneMenu onde o qual escolher ele ira fazer uma seleção diferente para o 2 selectOneMenu utilizando AJAX
Desde de já agradeço quem poder ajudar.

Minha view
<h:form prependId="false" id="formLaboratorio">
                <h:outputLabel value="Nome:" />
                <h:inputText autocomplete="off" maxlength="50" size="60" value="#{laboratorioController.laboratorio.nomeLaboratorio}" />
                <br />
                <h:outputLabel value="Campus:" />
                <p:selectOneMenu value="#{laboratorioController.campus}" style="width:350px;" >
                    <f:selectItem itemLabel=" - SELECIONE UM CAMPUS - " itemValue=""/>
                    <f:selectItems  value="#{campusController.listaCampus}" var="obj" itemLabel="#{obj.nomeCampus}" itemValue="#{obj.idCampus}"  />
                    <p:ajax  event="change"  listener="#{dependenciaController.listaCampusDependencia}" update=":formLaboratorio:dependencia" />
                </p:selectOneMenu>
                <br />
                <h:outputLabel value="Depend&ecirc;ncia:" />
                <h:selectOneMenu id="dependencia" value="#{laboratorioController.laboratorio.dependencia.idDependencia}"  style="width:350px;" >
                    <f:selectItem itemLabel=" - SELECIONE UMA DEPENDÊMCIA - " itemValue=""/>
                    <f:selectItems  value="#{dependenciaController.listaCampusDependencia}" var="obj" itemLabel="#{obj.nomeDependencia}" itemValue="#{obj.idDependencia}"  />
                </h:selectOneMenu>
                <h:panelGrid columns="3" style="float: right" >
                    <p:commandButton ajax="false" value="Inserir" action="#{laboratorioController.insert}" disabled="#{laboratorioController.laboratorio.idLaboratorio != -1}" />
                    <p:commandButton ajax="false" value="Salvar" action="#{laboratorioController.update}" disabled="#{laboratorioController.laboratorio.idLaboratorio == -1}" />
                    <p:commandButton ajax="false" value="Limpar" actionListener="#{laboratorioController.clear}" />
                </h:panelGrid>
            </h:form>

Controller

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lab.br.com.controller;

import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import lab.br.com.dao.LaboratorioDAO;
import lab.br.com.model.Campus;
import lab.br.com.model.Laboratorio;
import lab.br.com.util.ExceptionDatabase;
import lab.br.com.validator.LaboratorioValidator;
/**
 *
 * @author lcs
 */
@ManagedBean
@SessionScoped
public class LaboratorioController  implements Serializable{
    private Laboratorio laboratorio;
    private List<Laboratorio> listaLaboratorio;
    private Integer botao;
    private Campus campus;

    public Campus getCampus() {
        if(campus == null){
            campus = new Campus();
        }
        return campus;
    }

    public void setCampus(Campus campus) {
        this.campus = campus;
    }
    
    public void modEdicao(){
        setBotao(1);
    }
    public Integer getBotao() {
        if(botao == null){
            botao = new Integer(0);
        }
        return botao;
    }

    public void setBotao(Integer botao) {
        this.botao = botao;
    }

    public Laboratorio getLaboratorio() {
        if(laboratorio == null){
            laboratorio = new Laboratorio();
        }
        return laboratorio;
    }

    public void setLaboratorio(Laboratorio laboratorio) {
        this.laboratorio = laboratorio;
    }

    public List<Laboratorio> getListaLaboratorio() {
        if(listaLaboratorio == null){
            FacesContext mensagem = FacesContext.getCurrentInstance();
            try
            {
                LaboratorioDAO labDAO = new LaboratorioDAO();
                listaLaboratorio = labDAO.listaLaboratorio();
            }
            catch (ExceptionDatabase e) {
                mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(), null));
            }
        }
        return listaLaboratorio;
    }

    public void setListaLaboratorio(List<Laboratorio> listaLaboratorio) {
        this.listaLaboratorio = listaLaboratorio;
    }

    public void clear() {
        setLaboratorio(null);
        setListaLaboratorio(null);
    }

    public String formLaboratorioEditar(){
        return "actFormLaboratorio";
    }

    public String formLaboratorio(){
        clear();
        return "actFormLaboratorio";
    }


    public String insert(){
        FacesContext mensagem = FacesContext.getCurrentInstance();
        try
        {
            LaboratorioValidator disVal = new LaboratorioValidator();
            disVal.validate(null, null, getLaboratorio());

            LaboratorioDAO labDAO = new LaboratorioDAO();
            labDAO.insert(getLaboratorio());
            mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Laboratório: "+getLaboratorio().getNomeLaboratorio()+", foi inserido com sucesso!", null));
            setLaboratorio(null);
            setListaLaboratorio(null);
            return "actListaLaboratorio";
        }
        catch (ExceptionDatabase e) {
            getLaboratorio().setIdLaboratorio(null);
            mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(), null));
            return null;
        }
        catch (ValidatorException e) {
            mensagem.getMessageList().iterator();
            return null;
        }
    }

    public String update(){
        FacesContext mensagem = FacesContext.getCurrentInstance();
        try
        {
            LaboratorioValidator disVal = new LaboratorioValidator();
            disVal.validate(null, null, getLaboratorio());

            LaboratorioDAO labDAO = new LaboratorioDAO();
            labDAO.update(getLaboratorio());
            mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Laboratório: "+getLaboratorio().getNomeLaboratorio()+", foi atualizado com sucesso!", null));
            setLaboratorio(null);
            setListaLaboratorio(null);
            setBotao(0);
            return "actListaLaboratorio";
        }
        catch (ExceptionDatabase e) {
            getLaboratorio().setIdLaboratorio(null);
            mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(), null));
            return null;
        }
        catch (ValidatorException e) {
            mensagem.getMessageList().iterator();
            return null;
        }
    }

    public void delete(){
        FacesContext mensagem = FacesContext.getCurrentInstance();
        try
        {
            LaboratorioDAO labDAO = new LaboratorioDAO();
            labDAO.delete(getLaboratorio());
            mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Laboratório: "+getLaboratorio().getNomeLaboratorio()+", foi excluído com sucesso!", null));
            setLaboratorio(null);
            setListaLaboratorio(null);
        }
        catch (ExceptionDatabase e) {
            getLaboratorio().setIdLaboratorio(null);
            mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(), null));
        }
    }
}

3 Respostas

H

Esse link pode te ajudar: JSF Exemplos Simples com Ajax.

L

Sabe me dizer como faço para setar no onchange a opção selecionado da primeira combo?

L

Resolvido! Com immediate="true" finalmente ele entrou no método metodoValueChangeDependencia do manageBean

View:
<h:form prependId="false" id="formLaboratorio">
                <h:outputLabel value="Nome:" />
                <h:inputText autocomplete="off" maxlength="50" size="60" value="#{laboratorioController.laboratorio.nomeLaboratorio}" />
                <br />
                <h:outputLabel value="Campus:" />
                <h:selectOneMenu  valueChangeListener="#{laboratorioController.metodoValueChangeDependencia}" immediate="true" style="width:350px;" >
                    <f:selectItem itemLabel=" - SELECIONE UM CAMPUS - " itemValue=""/>
                    <f:selectItems  value="#{campusController.listaCampus}" var="obj" itemLabel="#{obj.nomeCampus}" itemValue="#{obj.idCampus}"  />
                    <f:ajax event="change"  render=":formLaboratorio:dependencia" />
                </h:selectOneMenu>
                <br />
                <h:outputLabel value="Depend&ecirc;ncia:" />
                <h:selectOneMenu id="dependencia" value="#{laboratorioController.laboratorio.dependencia.idDependencia}"  style="width:350px;" >
                    <f:selectItem itemLabel=" - SELECIONE UMA DEPENDÊMCIA - " itemValue=""/>
                    <f:selectItems  value="#{laboratorioController.listaCampusDependencia}" var="obj" itemLabel="#{obj.nomeDependencia}" itemValue="#{obj.idDependencia}"  />
                </h:selectOneMenu>
                <h:panelGrid columns="3" style="float: right" >
                    <p:commandButton ajax="false" value="Inserir" action="#{laboratorioController.insert}" disabled="#{laboratorioController.laboratorio.idLaboratorio != -1}" />
                    <p:commandButton ajax="false" value="Salvar" action="#{laboratorioController.update}" disabled="#{laboratorioController.laboratorio.idLaboratorio == -1}" />
                    <p:commandButton ajax="false" value="Limpar" actionListener="#{laboratorioController.clear}" />
                </h:panelGrid>
            </h:form>
            </p:fieldset>

ManageBean

@ManagedBean
@SessionScoped
public class LaboratorioController  implements Serializable{
    private Laboratorio laboratorio;
    private List<Laboratorio> listaLaboratorio;
    private List<CampusDependencia> listaCampusDependencia;
    private Integer botao;
    private Integer campus=-1;

    public List<CampusDependencia> getListaCampusDependencia() {
        if(listaCampusDependencia == null){
            FacesContext mensagem = FacesContext.getCurrentInstance();
            try
            {
                LaboratorioDAO labDAO = new LaboratorioDAO();
                listaCampusDependencia =  labDAO.findCampusDependencia(campus);
            }
            catch (ExceptionDatabase e) {
                mensagem.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,e.getMessage(), null));
                return null;
            }
        }
        return listaCampusDependencia;
    }

    public void setListaCampusDependencia(List<CampusDependencia> listaCampusDependencia) {
        this.listaCampusDependencia = listaCampusDependencia;
    }

    public Integer getCampus() {
        if(campus == null){
            campus = new Integer("-1");
        }
        return campus;
    }

    public void setCampus(Integer campus) {
        this.campus = campus;
    }

    public void metodoValueChangeDependencia(ValueChangeEvent e) {
        setCampus(Integer.parseInt((String) e.getNewValue()));
        setListaCampusDependencia(null);
    }

...
Criado 21 de outubro de 2012
Ultima resposta 21 de out. de 2012
Respostas 3
Participantes 2