Help ! Consulta com Painel

Pessoal,

Estou fazendo um formulário para cadastro de um fornecedor. Neste tenho um campo "Cidade".
Gostaria que quando o usuário digitasse neste campo e clicasse no link "Digite o nome da cidade para pesquisa" o mesmo filtrasse as cidades no grid do Modal que eu abro na tela.
Tudo funciona, o que eu não consigo e passar o mesmo como parametro.
Segue abaixo o código:

Formulário

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:ui="http://java.sun.com/jsf/facelets"
                    xmlns:h="http://java.sun.com/jsf/html"
                    xmlns:f="http://java.sun.com/jsf/core"
                    xmlns:a4j="http://richfaces.org/a4j"
                    xmlns:rich="http://richfaces.org/rich"
                    xmlns:ajax="https://ajax4jsf.dev.java.net/ajax"
                    xmlns:c="http://java.sun.com/jstl/core">
        <head>
            <link href="./css/estilos.css" rel="stylesheet" type="text/css" />
            <title>
                <ui:insert name="title">
                    Cadastro de Fornecedores
                </ui:insert>
            </title>
            <style  type="text/css">
                .odd-row {
                    background-color: #ECF3FE;
                }
                .even-row {
                    background-color: #FCFFFE;
                }
                .col {
                    text-align: center;
                }
                .col2 {
                    text-align: right;
                }
                .col3 {
                    text-align: left;
                    background-color: #ECF3FE;
                }
                .col4 {
                    text-align: left;
                }
            </style>
        </head>
        <!-- define searchlistBlock -->
        <a4j:outputPanel ajaxRendered="true" id="mainOutputPanel">
            <a4j:form>
                <!-- bloco de pesquisa -->
                <rich:panel id="searchlistBlock"  rendered="#{FornecedorAction.pesquisarState}"  style="text-align:center;"  >
                    <f:facet name="header" >
                        Pesquisar
                    </f:facet>
                    <h:panelGrid columns="1">
                        <h:column>
                            <rich:spacer height="20" />
                            <a4j:commandButton value="Adicionar" action="#{FornecedorAction.prepareAdicionar}" immediate="true"/>
                        </h:column>
                    </h:panelGrid>
                    <rich:spacer  height="20" />
                    <rich:dataTable  width="683" id="fornecedorList" rows="10" reRender="ds" ajaxSingle="true"
                                     rowClasses="odd-row,even-row"
                                     columnClasses="col" value="#{FornecedorAction.fornecedores}" var="row">
                        <rich:column sortBy="#{row.codigo}" >
                            <f:facet name="header">
                                <h:outputText styleClass="headerText" value="Código" />
                            </f:facet>
                            <h:outputText value="#{row.codigo}" />
                        </rich:column>
                        <rich:column sortBy="#{row.nome}"  filterBy="#{row.nome}" filterEvent="onkeyup">
                            <f:facet name="header">
                                <h:outputText styleClass="headerText" value="Nome" />
                            </f:facet>
                            <h:outputText value="#{row.nome}" />
                        </rich:column>
                        <rich:column sortBy="#{row.cpfCnpj}"  filterBy="#{row.cpfCnpj}" filterEvent="onkeyup" >
                            <f:facet name="header">
                                <h:outputText styleClass="headerText" value="CPF/CNPJ" />
                            </f:facet>
                            <h:outputText value="#{row.cpfCnpj}" />
                        </rich:column>
                        <rich:column sortBy="#{row.cidade.descricao}"  filterBy="#{row.cidade.descricao}" filterEvent="onkeyup" >
                            <f:facet name="header">
                                <h:outputText styleClass="headerText" value="Cidade" />
                            </f:facet>
                            <h:outputText value="#{row.cidade.descricao}" />
                        </rich:column>
                        <rich:column width="50" >
                            <f:facet name="header">
                                <h:outputText styleClass="headerText" value="Ações" />
                            </f:facet>
                            <span>
                                <a4j:commandLink action="#{FornecedorAction.prepareEditar}" immediate="true">
                                    <h:graphicImage value="/imagens/edit.gif" style="border:0"/>
                                    <f:setPropertyActionListener value="#{row}" target="#{FornecedorAction.fornecedor}"/>
                                </a4j:commandLink>
                            </span>
                            <!-- <span>
                                <a4j:commandLink immediate="true" action="#{FornecedorAction.getFornecedores}" oncomplete="Richfaces.showModalPanel('panel',{width:550, top:200});">
                                    <h:graphicImage value="/imagens/delete.gif" style="border:0"/>
                                    <f:setPropertyActionListener value="#{row}" target="#{FornecedorAction.fornecedor}"/>
                                </a4j:commandLink>
                            </span> -->
                        </rich:column>
                        <f:facet name="footer" styleClass="footerText" >
                            <rich:datascroller align="center" id="ds" renderIfSinglePage="false" maxPages="20" />
                        </f:facet>
                    </rich:dataTable>
                    <rich:modalPanel id="panel" width="350" height="100">
                        <f:facet name="header">
                            <h:panelGroup>
                                <h:outputText value="Confirmação"></h:outputText>
                            </h:panelGroup>
                        </f:facet>
                        <f:facet name="controls">
                            <h:panelGroup>
                                <h:graphicImage value="imagens/images.jpeg" styleClass="hidelink" id="hidelink"/>
                                <rich:componentControl for="panel" attachTo="hidelink" operation="hide" event="onclick"/>
                            </h:panelGroup>
                        </f:facet>
                        <h:outputText value="Deseja excluir a fornecedor selecionada ?"></h:outputText>
                        <br/><br/>
                        &lt;a4j:commandButton value="excluir" action="#{FornecedorAction.excluir}" immediate="true"&gt;
                        &lt;/a4j:commandButton&gt;
                        &lt;a4j:commandButton value="cancelar" action="#{FornecedorAction.voltar}" immediate="true"&gt;
                        &lt;/a4j:commandButton&gt;
                    &lt;/rich:modalPanel&gt;
                    &lt;rich:spacer  height="20" /&gt;
                &lt;/rich:panel&gt;

                &lt;!-- define addUpdateBlock --&gt;
                &lt;rich:panel id="addUpdateBlock" style="text-align:center;" rendered="#{FornecedorAction.adicionarState or FornecedorAction.editarState}"&gt;
                    &lt;f:facet name="header"&gt;
                        Dados
                    &lt;/f:facet&gt;
                    &lt;rich:spacer height="20" /&gt;
                    &lt;h:panelGrid  witch="300"  columns="3" border="0"  id="panel2" binding="#{FornecedorAction.panelForm}" columnClasses="col4"&gt;
                        &lt;h:outputLabel value="Tipo:"/&gt;
                        &lt;h:column&gt;
                            &lt;rich:comboBox id="tipo" value="#{FornecedorAction.fornecedor.tipo}" maxlength="10" size="10" defaultLabel="Fisica" required="true"
                                           requiredMessage="Campo Tipo de fornecedor é obrigatório." selectFirstOnUpdate="true" &gt;
                                &lt;f:selectItem itemValue="Fisica"  /&gt;
                                &lt;f:selectItem itemValue="Juridica"/&gt;
                            &lt;/rich:comboBox&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                            &lt;h:message for="tipo" errorStyle="color: darkred;"/&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="CPF / CNPJ:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.cpfCnpj}" maxlength="20" size="20" required="true" id="cpfcnpj"
                                         requiredMessage="Campo CPF / CNPJ é obrigatório." /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                            &lt;h:message for="cpfcnpj" errorStyle="color: darkred;"/&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="RG / Inscrição:"/&gt;
                        &lt;h:column &gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.rgInscricao}" maxlength="20" size="20" required="true" id="rgInscricao"
                                         requiredMessage="Campo RG / Inscrição é obrigatório." /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                            &lt;h:message for="rgInscricao" errorStyle="color: darkred;"/&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Nome:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.nome}" maxlength="20" size="20" required="true" id="nome"
                                         requiredMessage="Campo nome é obrigatório." /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                            &lt;h:message for="nome" errorStyle="color: darkred;"/&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Nome Fantasia:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.nomeFantasia}" maxlength="100" size="50" required="true" id="nomeFantasia"
                                         requiredMessage="Campo nome fantasia é obrigatório." /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                            &lt;h:message for="nomeFantasia" errorStyle="color: darkred;"/&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Endereço:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.endereco}" maxlength="100" size="50" id="endereco" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Bairro:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.bairro}" maxlength="25" size="25" id="bairro" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Telefone:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.fone}" maxlength="20" size="20" id="fone" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Telefax:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.fax}" maxlength="40" size="40" id="fax" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Cidade:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText   value="#{FornecedorAction.codigoCidade}" readonly="true" maxlength="4" size="4" required="true" id="codigoCidade"
                                          requiredMessage="Campo cidade é obrigatório." /&gt;
                             &lt;a4j:outputPanel ajaxRendered="true" &gt;
                            &lt;h:inputText  value="#{FornecedorAction.descricaoCidade}" maxlength="20" size="20" id="cidade" /&gt;
                            &lt;/a4j:outputPanel&gt;
                            &lt;a4j:commandLink  value="Digite o nome da cidade para pesquisa" immediate="true" oncomplete="Richfaces.showModalPanel('selectCidade',{width:800, top:200, height:300});"&gt;
                            &lt;/a4j:commandLink&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="CEP:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.cep}" maxlength="10" size="10" id="cep" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="eMail:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.email}" maxlength="40" size="40" id="email" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Contato:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputText value="#{FornecedorAction.fornecedor.contato}" maxlength="40" size="40" id="contato" /&gt;
                        &lt;/h:column&gt;
                        &lt;h:column&gt;
                        &lt;/h:column&gt;
                        &lt;h:outputLabel value="Observação:"/&gt;
                        &lt;h:column&gt;
                            &lt;h:inputTextarea value="#{FornecedorAction.fornecedor.observacao}"  style="height: 46px; width: 336px"  maxlength="255" size="255" id="observacao" /&gt;
                        &lt;/h:column&gt;
                    &lt;/h:panelGrid&gt;
                    &lt;rich:spacer height="40" /&gt;
                    &lt;a4j:commandButton value="Adicionar" action="#{FornecedorAction.adicionar}" rendered="#{FornecedorAction.adicionarState}"/&gt;
                    &lt;a4j:commandButton value="Salvar" action="#{FornecedorAction.editar}" rendered="#{FornecedorAction.editarState}"/&gt;
                    &lt;a4j:commandButton value="Voltar" action="#{FornecedorAction.voltar}" immediate="true"/&gt;
                    &lt;rich:modalPanel id="selectCidade" width="350" height="100"  style="text-align:center;" &gt;
                        &lt;f:facet name="header"&gt;
                            &lt;h:panelGroup&gt;
                                &lt;h:outputText value="Selecione a cidade: "&gt;&lt;/h:outputText&gt;
                            &lt;/h:panelGroup&gt;
                        &lt;/f:facet&gt;
                        &lt;f:facet name="controls"&gt;
                            &lt;h:panelGroup&gt;
                                &lt;h:graphicImage value="imagens/images.jpeg" styleClass="hidelink1" id="hidelink1"/&gt;
                                &lt;rich:componentControl for="selectCidade" attachTo="hidelink1" operation="hide" event="onclick"/&gt;
                            &lt;/h:panelGroup&gt;
                        &lt;/f:facet&gt;
                            &lt;h:inputText  value="#{FornecedorAction.descricaoCidade}" maxlength="20" size="20" id="PesquisaCidade" /&gt;
                        &lt;rich:dataTable  width="683" id="cidadeList" rows="10" reRender="ds" ajaxSingle="true"
                                         rowClasses="odd-row,even-row"
                                         columnClasses="col" value="#{FornecedorAction.cidades}" var="rowCid"&gt;
                            &lt;rich:column sortBy="#{rowCid.codigo}" &gt;
                                &lt;f:facet name="header"&gt;
                                    &lt;h:outputText styleClass="headerText" value="Código" /&gt;
                                &lt;/f:facet&gt;
                                &lt;h:outputText value="#{rowCid.codigo}" /&gt;
                            &lt;/rich:column&gt;
                            &lt;rich:column sortBy="#{rowCid.descricao}" filter="#{rowCid.descricao}"  &gt;
                                &lt;f:facet name="header"&gt;
                                    &lt;h:outputText styleClass="headerText" value="Descrição" /&gt;
                                &lt;/f:facet&gt;
                                &lt;h:outputText value="#{rowCid.descricao}" /&gt;
                            &lt;/rich:column&gt;
                            &lt;rich:column sortBy="#{rowCid.estado}" &gt;
                                &lt;f:facet name="header"&gt;
                                    &lt;h:outputText styleClass="headerText" value="Estado" /&gt;
                                &lt;/f:facet&gt;
                                &lt;h:outputText value="#{rowCid.estado}" /&gt;
                            &lt;/rich:column&gt;
                            &lt;rich:column width="50" &gt;
                                &lt;f:facet name="header"&gt;
                                    &lt;h:outputText styleClass="headerText" value="Ações" /&gt;
                                &lt;/f:facet&gt;
                                &lt;span&gt;
                                    &lt;a4j:commandLink action="#{FornecedorAction.searchCidade}" value="Selecionar" immediate="true" ajaxSingle="false" reRender="cidade"  &gt;
                                        &lt;f:setPropertyActionListener value="#{rowCid}" target="#{FornecedorAction.fornecedor.cidade}"/&gt;
                                        &lt;f:setPropertyActionListener value="#{rowCid.codigo}" target="#{FornecedorAction.codigoCidade}"/&gt;
                                    &lt;/a4j:commandLink&gt;
                                &lt;/span&gt;
                            &lt;/rich:column&gt;
                            &lt;f:facet name="footer" styleClass="footerText" &gt;
                                &lt;rich:datascroller align="center" id="ds" renderIfSinglePage="false" maxPages="20" /&gt;
                            &lt;/f:facet&gt;
                        &lt;/rich:dataTable&gt;
                    &lt;/rich:modalPanel&gt;
                &lt;/rich:panel&gt;
            &lt;/a4j:form&gt;
        &lt;/a4j:outputPanel&gt;
    &lt;/ui:composition&gt;
&lt;/html&gt;

Classe Action:

package br.bcs.action;

import br.bcs.bo.CidadeBo;
import br.bcs.bo.FornecedorBo;
import br.bcs.entity.Fornecedor;
import br.bcs.entity.Cidade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.model.DataModel;

/**
 *
 * @author Márcio Neves
 */
public class FornecedorAction {

    public static final String PESQUISAR_STATE = "pesquisar";
    public static final String ADICIONAR_STATE = "adicionar";
    public static final String EDITAR_STATE = "editar";
    private String currentState = PESQUISAR_STATE;
    private Fornecedor fornecedor;
    protected DataModel fornecedores;
    private UIPanel panelForm;
    private FornecedorBo fornecedorBo;
    private CidadeBo cidadeBo;package br.bcs.action;

import br.bcs.bo.CidadeBo;
import br.bcs.bo.FornecedorBo;
import br.bcs.entity.Fornecedor;
import br.bcs.entity.Cidade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.model.DataModel;

/**
 *
 * @author Márcio Neves
 */
public class FornecedorAction {

    public static final String PESQUISAR_STATE = "pesquisar";
    public static final String ADICIONAR_STATE = "adicionar";
    public static final String EDITAR_STATE = "editar";
    private String currentState = PESQUISAR_STATE;
    private Fornecedor fornecedor;
    protected DataModel fornecedores;
    private UIPanel panelForm;
    private FornecedorBo fornecedorBo;
    private CidadeBo cidadeBo;
    protected DataModel cidades;
    private String codigoCidade;
    private String descricaoCidade;

    /** Creates a new instance of CidadeAction */
    public FornecedorAction() {
    }

    public String getCurrentState() {
        return currentState;
    }

    public void setCurrentState(String currentState) {
        this.currentState = currentState;
    }

    public UIPanel getPanelForm() {
        return panelForm;
    }

    public void setPanelForm(UIPanel panelForm) {
        this.panelForm = panelForm;
    }

    /**
     * Prepara view adicionar
     */
    public String prepareAdicionar() {
        this.clear();
        this.setCurrentState(ADICIONAR_STATE);
        return "goToAdicionarFornecedor";
    }

    /**
     * Prepara view adicionar
     */
    public String preparePesquisarCidade() {
        return "goToAdicionarFornecedor";
    }
    /**
     * Prepara view editar
     */
    public String prepareEditar() {
        this.setCurrentState(EDITAR_STATE);
        return "goToEditarFornecedor";
    }

    public String preparePesquisar() {
        this.isPesquisarState();
        return "goToPesquisarFornecedor";
    }

    /*
     * Métodos que expõem o estado à página
     */
    public boolean isPesquisarState() {
        String state = this.getCurrentState();
        return (state == null || PESQUISAR_STATE.equals(state));
    }

    public boolean isAdicionarState() {
        return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
        return EDITAR_STATE.equals(this.getCurrentState());
    }

    /**
     * Limpa os componentes filhos para que depois eles possam ser recriados
     * @param component
     */
    protected void cleanSubmittedValues(UIComponent component) {
        component.getChildren().clear();
    }

    public void setFornecedores(DataModel fornecedores) {
        this.fornecedores = fornecedores;
    }

    public FornecedorBo getFornecedorBo() {
        if (fornecedorBo == null) {
            fornecedorBo = new FornecedorBo();
        }
        return fornecedorBo;
    }

    public DataModel getFornecedores() {
        this.setCurrentState(PESQUISAR_STATE);
        List&lt;Fornecedor&gt; lista = getFornecedorBo().listFornecedor(currentState, currentState);
        fornecedores = new ListDataModel(lista);
        return fornecedores;
    }

    public Fornecedor getFornecedor() {
        if (fornecedor == null) {
            this.fornecedor = new Fornecedor();
        }
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getDescricaoCidade() {
        return descricaoCidade;
    }

    public void setDescricaoCidade(String descricaoCidade) {
        this.descricaoCidade = descricaoCidade;
    }

    /**
     * Adiciona usuário
     */
    public void adicionar() {
        try {
            this.getFornecedorBo().saveFornecedor(this.fornecedor, this.fornecedor.getCpfCnpj());
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }
    /**
     * Edita usuário
     */
    public void editar() {
        try {
            // já edita diretamente na lista (a lista está como static)
            this.getFornecedorBo().updateFornecedor(this.fornecedor);
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }

    public String getCodigoCidade() {
        return codigoCidade;
    }

    public void setCodigoCidade(String codigoCidade) {
        this.codigoCidade = codigoCidade;
    }


    public Collection getEstado() {
        return this.cidadeBo.listEstados();
    }


    public String searchCidade() {
        Cidade cidade = new Cidade();
        try {
            cidade = this.fornecedorBo.searchCidade(Integer.parseInt(codigoCidade));
            fornecedor.setCidade(cidade);
        } catch (Exception ex) {
        }
        return null;
    }

    public CidadeBo getCidadeBo() {
        if (cidadeBo == null) {
            cidadeBo = new CidadeBo();
        }
        return cidadeBo;
    }

    public void setCidades(DataModel cidades) {
        this.cidades = cidades;
    }

    public DataModel getCidades() {package br.bcs.action;

import br.bcs.bo.CidadeBo;
import br.bcs.bo.FornecedorBo;
import br.bcs.entity.Fornecedor;
import br.bcs.entity.Cidade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.model.DataModel;

/**
 *
 * @author Márcio Neves
 */
public class FornecedorAction {

    public static final String PESQUISAR_STATE = "pesquisar";
    public static final String ADICIONAR_STATE = "adicionar";
    public static final String EDITAR_STATE = "editar";
    private String currentState = PESQUISAR_STATE;
    private Fornecedor fornecedor;
    protected DataModel fornecedores;
    private UIPanel panelForm;
    private FornecedorBo fornecedorBo;
    private CidadeBo cidadeBo;
    protected DataModel cidades;
    private String codigoCidade;
    private String descricaoCidade;

    /** Creates a new instance of CidadeAction */
    public FornecedorAction() {
    }

    public String getCurrentState() {
        return currentState;
    }

    public void setCurrentState(String currentState) {
        this.currentState = currentState;
    }

    public UIPanel getPanelForm() {
        return panelForm;
    }

    public void setPanelForm(UIPanel panelForm) {
        this.panelForm = panelForm;
    }

    /**
     * Prepara view adicionar
     */
    public String prepareAdicionar() {
        this.clear();
        this.setCurrentState(ADICIONAR_STATE);
        return "goToAdicionarFornecedor";
    }

    /**
     * Prepara view adicionar
     */
    public String preparePesquisarCidade() {package br.bcs.action;

import br.bcs.bo.CidadeBo;
import br.bcs.bo.FornecedorBo;
import br.bcs.entity.Fornecedor;
import br.bcs.entity.Cidade;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.component.UIPanel;
import javax.faces.model.DataModel;

/**
 *
 * @author Márcio Neves
 */
public class FornecedorAction {

    public static final String PESQUISAR_STATE = "pesquisar";
    public static final String ADICIONAR_STATE = "adicionar";
    public static final String EDITAR_STATE = "editar";
    private String currentState = PESQUISAR_STATE;
    private Fornecedor fornecedor;
    protected DataModel fornecedores;
    private UIPanel panelForm;
    private FornecedorBo fornecedorBo;
    private CidadeBo cidadeBo;
    protected DataModel cidades;
    private String codigoCidade;
    private String descricaoCidade;

    /** Creates a new instance of CidadeAction */
    public FornecedorAction() {
    }

    public String getCurrentState() {
        return currentState;
    }

    public void setCurrentState(String currentState) {
        this.currentState = currentState;
    }

    public UIPanel getPanelForm() {
        return panelForm;
    }

    public void setPanelForm(UIPanel panelForm) {
        this.panelForm = panelForm;
    }

    /**
     * Prepara view adicionar
     */
    public String prepareAdicionar() {
        this.clear();
        this.setCurrentState(ADICIONAR_STATE);
        return "goToAdicionarFornecedor";
    }

    /**
     * Prepara view adicionar
     */
    public String preparePesquisarCidade() {
        return "goToAdicionarFornecedor";
    }
    /**
     * Prepara view editar
     */
    public String prepareEditar() {
        this.setCurrentState(EDITAR_STATE);
        return "goToEditarFornecedor";
    }

    public String preparePesquisar() {
        this.isPesquisarState();
        return "goToPesquisarFornecedor";
    }

    /*
     * Métodos que expõem o estado à página
     */
    public boolean isPesquisarState() {
        String state = this.getCurrentState();
        return (state == null || PESQUISAR_STATE.equals(state));
    }

    public boolean isAdicionarState() {
        return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
        return EDITAR_STATE.equals(this.getCurrentState());
    }

    /**
     * Limpa os componentes filhos para que depois eles possam ser recriados
     * @param component
     */
    protected void cleanSubmittedValues(UIComponent component) {
        component.getChildren().clear();
    }

    public void setFornecedores(DataModel fornecedores) {
        this.fornecedores = fornecedores;
    }

    public FornecedorBo getFornecedorBo() {
        if (fornecedorBo == null) {
            fornecedorBo = new FornecedorBo();
        }
        return fornecedorBo;
    }

    public DataModel getFornecedores() {
        this.setCurrentState(PESQUISAR_STATE);
        List&lt;Fornecedor&gt; lista = getFornecedorBo().listFornecedor(currentState, currentState);
        fornecedores = new ListDataModel(lista);
        return fornecedores;
    }

    public Fornecedor getFornecedor() {
        if (fornecedor == null) {
            this.fornecedor = new Fornecedor();
        }
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getDescricaoCidade() {
        return descricaoCidade;
    }

    public void setDescricaoCidade(String descricaoCidade) {
        this.descricaoCidade = descricaoCidade;
    }

    /**
     * Adiciona usuário
     */
    public void adicionar() {
        try {
            this.getFornecedorBo().saveFornecedor(this.fornecedor, this.fornecedor.getCpfCnpj());
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }
    /**
     * Edita usuário
     */
    public void editar() {
        try {
            // já edita diretamente na lista (a lista está como static)
            this.getFornecedorBo().updateFornecedor(this.fornecedor);
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }

    public String getCodigoCidade() {
        return codigoCidade;
    }

    public void setCodigoCidade(String codigoCidade) {
        this.codigoCidade = codigoCidade;
    }


    public Collection getEstado() {
        return this.cidadeBo.listEstados();
    }


    public String searchCidade() {
        Cidade cidade = new Cidade();
        try {
            cidade = this.fornecedorBo.searchCidade(Integer.parseInt(codigoCidade));
            fornecedor.setCidade(cidade);
        } catch (Exception ex) {
        }
        return null;
    }

    public CidadeBo getCidadeBo() {
        if (cidadeBo == null) {
            cidadeBo = new CidadeBo();
        }
        return cidadeBo;
    }

    public void setCidades(DataModel cidades) {
        this.cidades = cidades;
    }

    public DataModel getCidades() {
        List&lt;Cidade&gt; lista = getCidadeBo().listCidade( "Descricao",this.descricaoCidade );
        cidades = new ListDataModel(lista);
        return cidades;
    }

    /**
     * Exclui usuário

    public void excluir() {
    try {
    this.getProdutoBo().deleteProduto(this.produto);
    } catch (Exception ex) {
    Logger.getLogger(ProdutoAction.class.getName()).log(Level.SEVERE, null, ex);
    }
    this.getProdutos();
    }

     * /**
     * Referente ao botão voltar
     */
    public String voltar() {
        this.clear();
        this.getFornecedores();
        return "goToPesquisarFornecedor";
    }

    /**
     * Limpa atributos
     */
    private void clear() {
        this.fornecedor = new Fornecedor();
        this.cleanSubmittedValues(this.panelForm);
    }
}

        return "goToAdicionarFornecedor";
    }
    /**
     * Prepara view editar
     */
    public String prepareEditar() {
        this.setCurrentState(EDITAR_STATE);
        return "goToEditarFornecedor";
    }

    public String preparePesquisar() {
        this.isPesquisarState();
        return "goToPesquisarFornecedor";
    }

    /*
     * Métodos que expõem o estado à página
     */
    public boolean isPesquisarState() {
        String state = this.getCurrentState();
        return (state == null || PESQUISAR_STATE.equals(state));
    }

    public boolean isAdicionarState() {
        return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
        return EDITAR_STATE.equals(this.getCurrentState());
    }

    /**
     * Limpa os componentes filhos para que depois eles possam ser recriados
     * @param component
     */
    protected void cleanSubmittedValues(UIComponent component) {
        component.getChildren().clear();
    }

    public void setFornecedores(DataModel fornecedores) {
        this.fornecedores = fornecedores;
    }

    public FornecedorBo getFornecedorBo() {
        if (fornecedorBo == null) {
            fornecedorBo = new FornecedorBo();
        }
        return fornecedorBo;
    }

    public DataModel getFornecedores() {
        this.setCurrentState(PESQUISAR_STATE);
        List&lt;Fornecedor&gt; lista = getFornecedorBo().listFornecedor(currentState, currentState);
        fornecedores = new ListDataModel(lista);
        return fornecedores;
    }

    public Fornecedor getFornecedor() {
        if (fornecedor == null) {
            this.fornecedor = new Fornecedor();
        }
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getDescricaoCidade() {
        return descricaoCidade;
    }

    public void setDescricaoCidade(String descricaoCidade) {
        this.descricaoCidade = descricaoCidade;
    }

    /**
     * Adiciona usuário
     */
    public void adicionar() {
        try {
            this.getFornecedorBo().saveFornecedor(this.fornecedor, this.fornecedor.getCpfCnpj());
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }
    /**
     * Edita usuário
     */
    public void editar() {
        try {
            // já edita diretamente na lista (a lista está como static)
            this.getFornecedorBo().updateFornecedor(this.fornecedor);
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }

    public String getCodigoCidade() {
        return codigoCidade;
    }

    public void setCodigoCidade(String codigoCidade) {
        this.codigoCidade = codigoCidade;
    }


    public Collection getEstado() {
        return this.cidadeBo.listEstados();
    }


    public String searchCidade() {
        Cidade cidade = new Cidade();
        try {
            cidade = this.fornecedorBo.searchCidade(Integer.parseInt(codigoCidade));
            fornecedor.setCidade(cidade);
        } catch (Exception ex) {
        }
        return null;
    }

    public CidadeBo getCidadeBo() {
        if (cidadeBo == null) {
            cidadeBo = new CidadeBo();
        }
        return cidadeBo;
    }

    public void setCidades(DataModel cidades) {
        this.cidades = cidades;
    }

    public DataModel getCidades() {
        List&lt;Cidade&gt; lista = getCidadeBo().listCidade( "Descricao",this.descricaoCidade );
        cidades = new ListDataModel(lista);
        return cidades;
    }

    /**
     * Exclui usuário

    public void excluir() {
    try {
    this.getProdutoBo().deleteProduto(this.produto);
    } catch (Exception ex) {
    Logger.getLogger(ProdutoAction.class.getName()).log(Level.SEVERE, null, ex);
    }
    this.getProdutos();
    }

     * /**
     * Referente ao botão voltar
     */
    public String voltar() {
        this.clear();
        this.getFornecedores();
        return "goToPesquisarFornecedor";
    }

    /**
     * Limpa atributos
     */
    private void clear() {
        this.fornecedor = new Fornecedor();
        this.cleanSubmittedValues(this.panelForm);
    }
}

        List&lt;Cidade&gt; lista = getCidadeBo().listCidade( "Descricao",this.descricaoCidade );
        cidades = new ListDataModel(lista);
        return cidades;
    }

    /**
     * Exclui usuário

    public void excluir() {
    try {
    this.getProdutoBo().deleteProduto(this.produto);
    } catch (Exception ex) {
    Logger.getLogger(ProdutoAction.class.getName()).log(Level.SEVERE, null, ex);
    }
    this.getProdutos();
    }

     * /**
     * Referente ao botão voltar
     */
    public String voltar() {
        this.clear();
        this.getFornecedores();
        return "goToPesquisarFornecedor";
    }

    /**
     * Limpa atributos
     */
    private void clear() {
        this.fornecedor = new Fornecedor();
        this.cleanSubmittedValues(this.panelForm);
    }
}

    protected DataModel cidades;
    private String codigoCidade;
    private String descricaoCidade;

    /** Creates a new instance of CidadeAction */
    public FornecedorAction() {
    }

    public String getCurrentState() {
        return currentState;
    }

    public void setCurrentState(String currentState) {
        this.currentState = currentState;
    }

    public UIPanel getPanelForm() {
        return panelForm;
    }

    public void setPanelForm(UIPanel panelForm) {
        this.panelForm = panelForm;
    }

    /**
     * Prepara view adicionar
     */
    public String prepareAdicionar() {
        this.clear();
        this.setCurrentState(ADICIONAR_STATE);
        return "goToAdicionarFornecedor";
    }

    /**
     * Prepara view adicionar
     */
    public String preparePesquisarCidade() {
        return "goToAdicionarFornecedor";
    }
    /**
     * Prepara view editar
     */
    public String prepareEditar() {
        this.setCurrentState(EDITAR_STATE);
        return "goToEditarFornecedor";
    }

    public String preparePesquisar() {
        this.isPesquisarState();
        return "goToPesquisarFornecedor";
    }

    /*
     * Métodos que expõem o estado à página
     */
    public boolean isPesquisarState() {
        String state = this.getCurrentState();
        return (state == null || PESQUISAR_STATE.equals(state));
    }

    public boolean isAdicionarState() {
        return ADICIONAR_STATE.equals(this.getCurrentState());
    }

    public boolean isEditarState() {
        return EDITAR_STATE.equals(this.getCurrentState());
    }

    /**
     * Limpa os componentes filhos para que depois eles possam ser recriados
     * @param component
     */
    protected void cleanSubmittedValues(UIComponent component) {
        component.getChildren().clear();
    }

    public void setFornecedores(DataModel fornecedores) {
        this.fornecedores = fornecedores;
    }

    public FornecedorBo getFornecedorBo() {
        if (fornecedorBo == null) {
            fornecedorBo = new FornecedorBo();
        }
        return fornecedorBo;
    }

    public DataModel getFornecedores() {
        this.setCurrentState(PESQUISAR_STATE);
        List&lt;Fornecedor&gt; lista = getFornecedorBo().listFornecedor(currentState, currentState);
        fornecedores = new ListDataModel(lista);
        return fornecedores;
    }

    public Fornecedor getFornecedor() {
        if (fornecedor == null) {
            this.fornecedor = new Fornecedor();
        }
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public String getDescricaoCidade() {
        return descricaoCidade;
    }

    public void setDescricaoCidade(String descricaoCidade) {
        this.descricaoCidade = descricaoCidade;
    }

    /**
     * Adiciona usuário
     */
    public void adicionar() {
        try {
            this.getFornecedorBo().saveFornecedor(this.fornecedor, this.fornecedor.getCpfCnpj());
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }
    /**
     * Edita usuário
     */
    public void editar() {
        try {
            // já edita diretamente na lista (a lista está como static)
            this.getFornecedorBo().updateFornecedor(this.fornecedor);
        } catch (Exception ex) {
            Logger.getLogger(FornecedorAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.getFornecedores();
    }

    public String getCodigoCidade() {
        return codigoCidade;
    }

    public void setCodigoCidade(String codigoCidade) {
        this.codigoCidade = codigoCidade;
    }


    public Collection getEstado() {
        return this.cidadeBo.listEstados();
    }


    public String searchCidade() {
        Cidade cidade = new Cidade();
        try {
            cidade = this.fornecedorBo.searchCidade(Integer.parseInt(codigoCidade));
            fornecedor.setCidade(cidade);
        } catch (Exception ex) {
        }
        return null;
    }

    public CidadeBo getCidadeBo() {
        if (cidadeBo == null) {
            cidadeBo = new CidadeBo();
        }
        return cidadeBo;
    }

    public void setCidades(DataModel cidades) {
        this.cidades = cidades;
    }

    public DataModel getCidades() {
        List&lt;Cidade&gt; lista = getCidadeBo().listCidade( "Descricao",this.descricaoCidade );
        cidades = new ListDataModel(lista);
        return cidades;
    }

    /**
     * Exclui usuário

    public void excluir() {
    try {
    this.getProdutoBo().deleteProduto(this.produto);
    } catch (Exception ex) {
    Logger.getLogger(ProdutoAction.class.getName()).log(Level.SEVERE, null, ex);
    }
    this.getProdutos();
    }

     * /**
     * Referente ao botão voltar
     */
    public String voltar() {
        this.clear();
        this.getFornecedores();
        return "goToPesquisarFornecedor";
    }

    /**
     * Limpa atributos
     */
    private void clear() {
        this.fornecedor = new Fornecedor();
        this.cleanSubmittedValues(this.panelForm);
    }
}