Certo, já tentei de vários jeitos, mas vamos la…
aqui vou colocar só o dialog da página xhtml:
<p:dialog header="Detalhes do Cliente" widgetVar="clienteDialog" resizable="false" id="clienteDlg"
showEffect="fade" hideEffect="explode" modal="true">
<p:ajax event="onHide" listener="#{ClienteBean.limpaCombos}"/>
<h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">
<h:outputText value="Nome:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.nome}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputText value="#{ClienteBean.selectedCliente.nome}" rendered="#{ClienteBean.editMode}" required="true" requiredMessage="Informe o Nome" label="Nome" style="text-transform:uppercase"/>
</h:panelGroup>
<h:outputText value="CPF/CNPJ:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.cpfCnpj}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputText id="cpfCnpj" label="cpfCnpj" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.cpfCnpj}" maxlength="14" size="40" required="true" requiredMessage="Informe o CPF/CNPJ" style="text-transform:uppercase"/>
</h:panelGroup>
<h:outputText value="Endereço:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.endereco}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputText id="end" label="end" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.endereco}" maxlength="80" size="50" style="text-transform:uppercase" required="true" requiredMessage="Informe o Endereço"/>
</h:panelGroup>
<h:outputText value="Complemento:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.complemento}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputText id="comple" label="comple" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.complemento}" maxlength="45" size="50" style="text-transform:uppercase" />
</h:panelGroup>
<h:outputText value="Número:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.numero}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputText id="nro" label="nro" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.numero}" maxlength="10" size="40" style="text-transform:uppercase"/>
</h:panelGroup>
<h:outputText value="CEP:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.cep}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputMask id="cep" label="cep" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.cep}" mask="99999-999" required="true" requiredMessage="Informe o Cep"/>
</h:panelGroup>
<h:outputText value="Bairro:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.bairro}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputText id="bairro" label="bairro" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.bairro}" maxlength="30" size="50" style="text-transform:uppercase" />
</h:panelGroup>
<h:outputText value="Telefone1:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.telefone1}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputMask id="tel1" label="tel1" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.telefone1}" mask="([telefone removido]" required="true" requiredMessage="Informe o telefone"/>
</h:panelGroup>
<h:outputText value="Telefone2:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.telefone2}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:inputMask id="tel2" label="tel2" rendered="#{ClienteBean.editMode}" value="#{ClienteBean.selectedCliente.telefone2}" mask="([telefone removido]"/>
</h:panelGroup>
<h:outputText value="Estado:" />
<h:panelGroup>
<h:outputText value="#{ClienteBean.selectedCliente.uf}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:selectOneMenu id="estado" value="#{ClienteBean.nomeEstado}" rendered="#{ClienteBean.editMode}">
<f:selectItem itemLabel="#{ClienteBean.selectedCliente.uf}" itemValue="#{ClienteBean.selectedCliente.uf}"/>
<f:selectItems value="#{ClienteBean.estados}"/>
<p:ajax update="cidade" listener="#{ClienteBean.atualizaCidades}"/>
</p:selectOneMenu>
</h:panelGroup>
<h:outputText value="Cidade:" />
<h:outputText value="#{ClienteBean.selectedCliente.cidade}" style="font-weight:bold" rendered="#{!ClienteBean.editMode}"/>
<p:selectOneMenu id="cidade" value="#{ClienteBean.nomeCidade}" rendered="#{ClienteBean.editMode}" required="true" requiredMessage="Selecione a Cidade">
<f:selectItem itemLabel="#{ClienteBean.selectedCliente.cidade}" itemValue="#{ClienteBean.selectedCliente.cidade}"/>
<f:selectItems value="#{ClienteBean.cidades}"/>
</p:selectOneMenu>
<f:facet name="footer">
<p:outputPanel rendered="#{ClienteBean.editMode}" layout="block" style="text-align:right">
<p:commandButton value="Salvar" update="tbl1 avisos" actionListener="#{ClienteBean.alterarCliente}"
onclick="clienteDialog.hide()" image="ui-icon ui-icon-check"/>
<p:commandButton value="Cancelar" onclick="clienteDialog.hide()" image="ui-icon ui-icon-close" actionListener="#{ClienteBean.limpaCombos}"/>
</p:outputPanel>
</f:facet>
</h:panelGrid>
</p:dialog>
Observe que no botão cancelar ele chama um método limpaCombos
Aqui o Bean:
package br.com.sacx.controls;
import br.com.sacx.daos.CidadeDAO;
import br.com.sacx.daos.ClienteDAO;
import br.com.sacx.daos.EstadoDAO;
import br.com.sacx.models.Cidade;
import br.com.sacx.models.Cliente;
import br.com.sacx.models.Estado;
import java.io.IOException;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
@ManagedBean
public class ClienteBean implements Serializable {
private Cliente cliente = new Cliente();
private ClienteDAO dao = new ClienteDAO();
private EstadoDAO estadoDao = new EstadoDAO();
private CidadeDAO cidadeDao = new CidadeDAO();
private ArrayList<Cliente> listCliente = new ArrayList<Cliente>();
private String nomeEstado;
private String nomeCidade;
private Map<String, String> estados = new HashMap<String, String>();
private Map<String, Map<String, String>> cidadesData = new HashMap<String, Map<String, String>>();
private Map<String, String> cidades = new HashMap<String, String>();
private String nome;
private String cpfCnpj;
private Cliente selectedCliente;
private boolean editMode;
private String selectedUf;
private String selectedCidade;
public ClienteBean() throws SQLException {
estados = new HashMap<String, String>();
cidades = new HashMap<String, String>();
// POPULA OS COMBOS
for (Estado listaEstados : estadoDao.getEstado()) {
estados.put(listaEstados.getUf(), listaEstados.getUf());
System.out.println("----------------- ESTADO LIDO: " + listaEstados.getNome());
Map<String, String> cidadesTemp = new HashMap<String, String>();
for (Cidade listaCidades : cidadeDao.getCidade(listaEstados.getCodEstado())) {
System.out.println("----------------- CIDADE LIDA: " + listaCidades.getNome());
cidadesTemp.put(listaCidades.getNome(), listaCidades.getNome());
// cidades.put(listaCidades.getNome(), listaCidades.getNome());
}
cidadesData.put(listaEstados.getUf(), cidadesTemp);
}
}
/* public String getSelectedUf(){
selectedUf = getSelectedCliente().getUf();
return selectedUf;
}
public String getSelectedCidade(){
selectedCidade = getSelectedCliente().getCidade();
return selectedCidade;
}*/
// ATUALIZA COMBO CIDADE
public void atualizaCidades() {
if (getNomeEstado() != null && !getNomeEstado().equals("")) {
cidades = cidadesData.get(getNomeEstado());
} else {
cidades = new HashMap<String, String>();
}
}
public void consultarCliente() {
String mensagem = "";
if (getNome().trim().equals("") && getCpfCnpj().trim().equals("")) {
mensagem = "Preencha pelo menos um campo";
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso:", mensagem));
} else {
try {
setListCliente(dao.getClienteByNome(getNome(), getCpfCnpj()));
//seando a lista na sessão
//FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("listCliente", getListCliente());
setNome(new String());
setCpfCnpj(new String());
if (getListCliente().isEmpty()) {
mensagem = "Não foram encontrados dados para sua consulta";
} else {
mensagem = "Redirecionando...";
}
} catch (Exception e) {
e.printStackTrace();
mensagem = "Erro ao realizar consulta";
}
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso", mensagem));
try {
if (getListCliente().isEmpty() == false) {
context.getExternalContext().redirect("faces/listacliente.xhtml");
}
} catch (IOException ex) {
Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
// SALVA NO BANCO
public void salvar(ActionEvent event) {
try {
//Verifica se tem algum cliente com o mesmo CPF/CNPJ
boolean verifica = dao.verificaCliente("", getCliente().getCpfCnpj());
if (verifica == true) {
String mensagem = "Já existe um cliente cadastrado com este CPF/CNPJ!";
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso:", mensagem));
//Para limpar os campos na página...
setCliente(new Cliente());
setNomeCidade(new String());
setNomeEstado(new String());
} else {
int idEstado = estadoDao.getEstadoByUf(getNomeEstado());
int idCidade = cidadeDao.getCidadeByNome(getNomeCidade());
//Setando os id's do estado e cidade
getCliente().setCodCidade(idCidade);
getCliente().setCodEstado(idEstado);
//Setando os campos para caixa alta
getCliente().setNome(getCliente().getNome().toUpperCase());
getCliente().setEndereco(getCliente().getEndereco().toUpperCase());
getCliente().setComplemento(getCliente().getComplemento().toUpperCase());
getCliente().setBairro(getCliente().getBairro().toUpperCase());
dao.save(getCliente()); // salvando no banco de dados
setCliente(new Cliente()); // criando um novo objeto para caso for inserir novamente
setNomeEstado(new String());
setNomeCidade(new String());
}
} catch (SQLException ex) {
Logger.getLogger(ClienteBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void alterarCliente(ActionEvent event) {
try {
int idEstado = estadoDao.getEstadoByUf(getNomeEstado());
int idCidade = cidadeDao.getCidadeByNome(getNomeCidade());
//Setando os id's do estado e cidade
getSelectedCliente().setCodCidade(idCidade);
getSelectedCliente().setCodEstado(idEstado);
//Setando os campos para caixa alta
getSelectedCliente().setNome(getSelectedCliente().getNome().toUpperCase());
getSelectedCliente().setEndereco(getSelectedCliente().getEndereco().toUpperCase());
getSelectedCliente().setComplemento(getSelectedCliente().getComplemento().toUpperCase());
getSelectedCliente().setBairro(getSelectedCliente().getBairro().toUpperCase());
dao.update(getSelectedCliente()); // salvando no banco de dados
setCliente(new Cliente()); // criando um novo objeto para caso for inserir novamente
setNomeEstado(new String());
setNomeCidade(new String());
setListCliente(dao.getCliente());
String mensagem = "Alterado com sucesso";
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso:", mensagem));
} catch (SQLException ex) {
Logger.getLogger(ClienteBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void delete(ActionEvent event) {
try {
dao.delete(getSelectedCliente());
setCliente(new Cliente()); // criando um novo objeto para caso for inserir novamente
setNomeEstado(new String());
setNomeCidade(new String());
setListCliente(dao.getCliente());
String mensagem = "Excluído com sucesso";
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Aviso:", mensagem));
} catch (SQLException ex) {
Logger.getLogger(ClienteBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Método para Limpar os comobs uf, e cidade
public void limpaCombos(ActionEvent event) {
setNomeCidade(new String());
setNomeEstado(new String());
}
/**
* @return the cliente
*/
public Cliente getCliente() {
return cliente;
}
/**
* @param cliente the cliente to set
*/
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
/**
* @return the estadoDao
*/
public EstadoDAO getEstadoDao() {
return estadoDao;
}
/**
* @param estadoDao the estadoDao to set
*/
public void setEstadoDao(EstadoDAO estadoDao) {
this.estadoDao = estadoDao;
}
/**
* @return the estados
*/
public Map<String, String> getEstados() {
return estados;
}
/**
* @param estados the estados to set
*/
public void setEstados(Map<String, String> estados) {
this.estados = estados;
}
/**
* @return the cidadesData
*/
public Map<String, Map<String, String>> getCidadesData() {
return cidadesData;
}
/**
* @param cidadesData the cidadesData to set
*/
public void setCidadesData(Map<String, Map<String, String>> cidadesData) {
this.cidadesData = cidadesData;
}
/**
* @return the cidades
*/
public Map<String, String> getCidades() {
return cidades;
}
/**
* @param cidades the cidades to set
*/
public void setCidades(Map<String, String> cidades) {
this.cidades = cidades;
}
/**
* @return the nomeEstado
*/
public String getNomeEstado() {
return nomeEstado;
}
/**
* @param nomeEstado the nomeEstado to set
*/
public void setNomeEstado(String nomeEstado) {
this.nomeEstado = nomeEstado;
}
/**
* @return the nomeCidade
*/
public String getNomeCidade() {
return nomeCidade;
}
/**
* @param nomeCidade the nomeCidade to set
*/
public void setNomeCidade(String nomeCidade) {
this.nomeCidade = nomeCidade;
}
/**
* @return the listCliente
*/
public ArrayList<Cliente> getListCliente() {
return listCliente;
}
/**
* @param listCliente the listCliente to set
*/
public void setListCliente(ArrayList<Cliente> listCliente) {
this.listCliente = listCliente;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return the cpfCnpj
*/
public String getCpfCnpj() {
return cpfCnpj;
}
/**
* @param cpfCnpj the cpfCnpj to set
*/
public void setCpfCnpj(String cpfCnpj) {
this.cpfCnpj = cpfCnpj;
}
/**
* @return the selectedCliente
*/
public Cliente getSelectedCliente() {
return selectedCliente;
}
/**
* @param selectedCliente the selectedCliente to set
*/
public void setSelectedCliente(Cliente selectedCliente) {
this.selectedCliente = selectedCliente;
}
/**
* @return the editMode
*/
public boolean isEditMode() {
return editMode;
}
/**
* @param editMode the editMode to set
*/
public void setEditMode(boolean editMode) {
this.editMode = editMode;
}
/**
* @param selectedUf the selectedUf to set
*/
public void setSelectedUf(String selectedUf) {
this.selectedUf = selectedUf;
}
/**
* @param selectedCidade the selectedCidade to set
*/
public void setSelectedCidade(String selectedCidade) {
this.selectedCidade = selectedCidade;
}
}
O bean tem o scope = session