Primefaces 3.4 ajax com selectOneMenu (RESOLVIDO)

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

[code]/*

  • 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 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 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 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));
    }
    }
    }
    [/code]

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

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

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

[code]@ManagedBean
@SessionScoped
public class LaboratorioController implements Serializable{
private Laboratorio laboratorio;
private List listaLaboratorio;
private List 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);
}

…[/code]