Jsf - atributo dentro do manage bean

6 respostas
T

boa tarde.

tenho um atributo dentro do managed bean, só que este atributo está sendo compartilhado entre outras session’s. o managed bean está com o scopo de session, fiz um teste rodei a aplicação em 2 máquinas diferentes e coloquei para ser exibido o id da session, o id é diferente, então para cada session é criado um managed bean, o problema está sendo o atributo dele. esse atributo é um objeto.

configuração do faces-config:

<managed-bean>
        <managed-bean-name>agenteControle</managed-bean-name>
        <managed-bean-class>br.com.winbooks.controle.Agente</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

manage bean:

public class Agente extends Generico {

    private String descricaoPesquisa;  // armazena o criterio de pesquisa.
    private String opcaoPesquisaSelecionada;  // armazena a condição de pesquisa.
    private boolean montaResultadoPesquisa;  // se true a tela renderiza a grade com o resultado da pesquisa.
    private Map opcoesPesquisa;  // armazena as opções de pesquisa.
    private wb.src.bean.Bagente agente;
    private wb.src.bean.Bendereco endereco;
    private wb.src.bean.Btelefone telefone;
    private wb.src.bean.BunidadeFederal unidadeFederal;
    private DataModel listaAgente;  // armazena o resultado da pesquisa.
    private List<SelectItem> tiposTelefone; // armazena uma lista com os tipos de telefone, preparada para ser usada dentro do combo.
    private List<SelectItem> tiposEndereco; // armazena uma lista com os tipos de endereço, preparada para ser usada dentro do combo.
    private List<SelectItem> unidadesFederais; // armazena uma lista com as unidades federais, preparada para ser usada dentro do combo.
    private String tipoEnderecoSelecionado; // armazena o tipo de endereço selecionado na tela.
    private String tipoTelefoneSelecionado; // armazena o tipo de telefone selecionado na tela.
    private String unidadeFederalSelecionada; // armazena a unidade federal selecionado na tela.

    private boolean exibeTelefone = true;
    
    public Agente() {
        this.opcoesPesquisa = new HashMap();

        this.opcoesPesquisa.put("Apelido", "Apelido");
        this.opcoesPesquisa.put("Nome Completo", "Nome Completo");
        this.opcaoPesquisaSelecionada = "Nome Completo";

    }

//  ////////////////////////////////////////////////////////////////////////////
    
    public String getMsgCampoObrigatorio(){
        return super.getMsgCampoObrigatorio();
    } 
    
//  ////////////////////////////////////////////////////////////////////////////

    public void setExibeTelefone(boolean exibeTelefone){
        this.exibeTelefone = exibeTelefone;
    }
    
    public boolean getExibeTelefone(){
        return this.exibeTelefone;
    }
    
//  ////////////////////////////////////////////////////////////////////////////

    /**
     * Abre a tela para incluir um novo registro.
     * @return
     * String com o status.
     */
    public String novo() {
        this.agente = wb.src.facade.Fagente.getBeanAgente();
        return "incluiNovoAgente";
    }

    /**
     * Apaga o registro atual.
     * @return
     * String com o status.
     */
    public String apaga() {

        wb.src.bean.Bagente beanAgente =
                (wb.src.bean.Bagente) listaAgente.getRowData();

        if (wb.src.facade.Fagente.apagaPk(beanAgente.getPk())) {
            return "sucessoApagaAgente";
        }

        return "falhaApagaAgente";
    }

    /**
     * Salva o registro.
     * @return
     * String com o status.
     */
    public String salva() {

        if (wb.src.facade.Fagente.salva(this.agente)) {
            return "sucessoSalvaAgente";
        }

        return "falhaSalvaAgente";
    }

    /**
     * Abre a tela para alterar o registro atual.
     * @return
     * String com o status.
     */
    public String altera() {

//        String xx = this.getSessao();
        
        wb.src.bean.Bagente beanAgente =
                (wb.src.bean.Bagente) listaAgente.getRowData();

        this.setAgente(wb.src.facade.Fagente.pesquisaPk(beanAgente.getPk()));
       
        return "alteraAgente";
    }

    /**
     * @return
     * Bean com as informações atuais do registro.
     */
    public wb.src.bean.Bagente getAgente() {
        return this.agente;
    }

    /**
     * @param agente
     */
    public void setAgente(wb.src.bean.Bagente agente) {
        this.agente = agente;
    }

    /**
     * @return
     * Bean com as informações do telefone.
     */
    public wb.src.bean.Btelefone getTelefone() {
        return this.telefone;
    }

    /**
     * @param beanTelefone
     */
    public void setTelefone(wb.src.bean.Btelefone beanTelefone) {
        this.telefone = beanTelefone;
    }

    /**
     * @return
     * Bean com as informações do endereço.
     */
    public wb.src.bean.Bendereco getEndereco() {
        return this.endereco;
    }

    /**
     * @param beanTelefone
     */
    public void setEndereco(wb.src.bean.Bendereco beanEndereco) {
        this.endereco = beanEndereco;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * @return
     * Resultado da pesquisa.
     */
    public DataModel getResultadoPesquisa() {
        return this.listaAgente;
    }

    public void setResultadoPesquisa(DataModel lista){
        this.listaAgente = lista;
    }
    
//  ////////////////////////////////////////////////////////////////////////////
    public void setDescricaoPesquisa(String descricao) {
        this.descricaoPesquisa = descricao.trim();
    }

    public String getDescricaoPesquisa() {
        return this.descricaoPesquisa;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setOpcaoPesquisaSelecionada(String opcao) {
        this.opcaoPesquisaSelecionada = opcao;
    }

    public String getOpcaoPesquisaSelecionada() {
        return this.opcaoPesquisaSelecionada;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setTipoEnderecoSelecionado(String tipoEndereco) {
        this.tipoEnderecoSelecionado = tipoEndereco;
    }

    public String getTipoEnderecoSelecionado() {
        return this.tipoEnderecoSelecionado;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setTipoTelefoneSelecionado(String tipoTelefone) {
        this.tipoTelefoneSelecionado = tipoTelefone;
    }

    public String getTipoTelefoneSelecionado() {
        return this.tipoTelefoneSelecionado;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setUnidadeFederalSelecionada(String unidadeFederal) {
        this.unidadeFederalSelecionada = unidadeFederal;
    }

    public String getUnidadeFederalSelecionada() {
        return this.unidadeFederalSelecionada;
    }

    //  ////////////////////////////////////////////////////////////////////////////
    public String pesquisa() {
        this.setMontaResultadoPesquisa(true);
        wb.src.bean.Bagente beanAgente = wb.src.facade.Fagente.getBeanAgente();

        if (this.opcaoPesquisaSelecionada.equalsIgnoreCase("apelido")) {
            beanAgente.setApelido(this.descricaoPesquisa);
        }
        if (this.opcaoPesquisaSelecionada.equalsIgnoreCase("nome completo")) {
            beanAgente.setNome(this.descricaoPesquisa);
        }

        this.listaAgente = new ListDataModel(wb.src.facade.Fagente.listaPesquisaBean(beanAgente));

        return "sucessoPesquisaAgente";
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setMontaResultadoPesquisa(boolean montaResultado) {
        this.montaResultadoPesquisa = montaResultado;
    }

    public boolean getMontaResultadoPesquisa() {
        return this.montaResultadoPesquisa;
    }

//  ////////////////////////////////////////////////////////////////////////////
    public void setOpcoesPesquisa(Map opcoesPesquisa) {
        this.opcoesPesquisa = opcoesPesquisa;
    }

    public Map getOpcoesPesquisa() {
        return this.opcoesPesquisa;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Prepara os tipos de endereço, para ser usados em um combo.
     * @return
     * Lista com varios items.
     */
    public List<SelectItem> getTiposEndereco() {

        if (this.tiposEndereco == null) {
            this.tiposEndereco = new ArrayList<SelectItem>();
            List resultado = this.getListaTipoEndereco();
            Iterator it = resultado.iterator();
            while (it.hasNext()) {
                wb.src.bean.BtipoEndereco beanTipoEndereco =
                        (wb.src.bean.BtipoEndereco) it.next();

                this.tiposEndereco.add(
                        new SelectItem(beanTipoEndereco.getPk(), beanTipoEndereco.getDescricao()));
            }
        }

        return this.tiposEndereco;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Prepara os tipos de telefone, para ser usados em um combo.
     * @return
     * Lista com varios items.
     */
    public List<SelectItem> getTiposTelefone() {

        if (this.tiposTelefone == null) {
            this.tiposTelefone = new ArrayList<SelectItem>();
            List resultado = this.getListaTipoTelefone();
            Iterator it = resultado.iterator();
            while (it.hasNext()) {
                wb.src.bean.BtipoTelefone beanTipoTelefone =
                        (wb.src.bean.BtipoTelefone) it.next();

                this.tiposTelefone.add(
                        new SelectItem(beanTipoTelefone.getPk(), beanTipoTelefone.getDescricao()));
            }
        }

        return this.tiposTelefone;
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Prepara as unidades federais, para ser usados em um combo.
     * @return
     * Lista com varios items.
     */
    public List<SelectItem> getUnidadesFederais() {

        if (this.unidadesFederais == null) {
            this.unidadesFederais = new ArrayList<SelectItem>();
            List resultado = this.getListaUnidadeFederal();
            Iterator it = resultado.iterator();
            while (it.hasNext()) {
                wb.src.bean.BunidadeFederal beanUnidadeFederal =
                        (wb.src.bean.BunidadeFederal) it.next();

                this.unidadesFederais.add(
                        new SelectItem(beanUnidadeFederal.getPk(), beanUnidadeFederal.getSigla()));
            }
        }

        return this.unidadesFederais;
    }

    //  ////////////////////////////////////////////////////////////////////////////
    /**
     * Remove o telefone da lista. JSF.
     * @return
     */
    public String removeTelefone() {

        if (this.agente.removeTelefone(this.converteInteiro(
                this.getParamentro("idTelefoneApaga")))) {
            return "sucessoApagaAgente";
        }

        return "falhaApagaAgente";

    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Inclui um novo endereço na lista. JSF.
     * @return
     */
    public String novoEndereco() {
        this.endereco = wb.src.facade.Fagente.getBeanEndereco();
        return "incluiNovoAgenteEndereco";
    }
//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Edita o endereço atual. JSF.
     * @return
     */
    public String editaEndereco() {

        this.setEndereco(this.agente.buscaEndereco(
                this.converteInteiro(this.getParamentro("idEnderecoAltera"))));

        this.tipoEnderecoSelecionado   = "";
        if (this.endereco.getTipoEndereco() != null) {
            this.tipoEnderecoSelecionado = String.valueOf(this.endereco.getTipoEndereco().getPk());
        }

        this.unidadeFederalSelecionada = "";
        if (this.endereco.getUnidadeFederal() != null) {
            this.unidadeFederalSelecionada = String.valueOf(this.endereco.getUnidadeFederal().getPk());
        }
        
        return "sucessoManutencaoAgenteEndereco";

    }
//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Coloca ou altera o endereco na lista. JSF.
     * @return
     */
    public String manipulaEndereco() {

        this.trataTipoEnderecoSelecionado();
        this.trataUnidadeFederalSelecionada();

        if (this.endereco.getPk() == 0) {
            this.agente.setEndereco(this.endereco);
        }

        return "salvaManutencaoAgenteEndereco";
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Trata o tipo de endereco selecionado na tela.
     */
    private void trataTipoEnderecoSelecionado() {

        if (this.tiposEndereco != null) {
            if (this.endereco == null ||
                    this.converteInteiro(this.tipoEnderecoSelecionado) !=
                    this.endereco.getTipoEndereco().getPk()) {

                this.endereco.setTipoEndereco(this.getBuscaTipoEnderecoLista(
                        this.converteInteiro(this.tipoEnderecoSelecionado)));
            }
        }

    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Trata o tipo de endereco selecionado na tela.
     */
    private void trataUnidadeFederalSelecionada() {

        if (this.unidadesFederais != null) {
            if (this.unidadeFederal == null ||
                    this.converteInteiro(this.unidadeFederalSelecionada) !=
                    this.unidadeFederal.getPk()) {

                this.endereco.setUnidadeFederal(this.getBuscaUnidadeFederalLista(
                        this.converteInteiro(this.unidadeFederalSelecionada)));
            }
        }

    }

    //  ////////////////////////////////////////////////////////////////////////////
    /**
     * Inclui um novo telefone na lista. JSF.
     * @return
     */
    public String novoTelefone() {
        this.telefone = wb.src.facade.Fagente.getBeanTelefone();
        return "incluiNovoAgenteTelefone";
    }
//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Edita o telefone atual. JSF.
     * @return
     */
    public String editaTelefone() {

        this.setTelefone(this.agente.buscaTelefone(
                this.converteInteiro(this.getParamentro("idTelefoneAltera"))));

        this.tipoTelefoneSelecionado = String.valueOf(this.telefone.getTipoTelefone().getPk());

        return "sucessoManutencaoAgenteTelefone";

    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Coloca ou altera o telefone na lista. JSF.
     * @return
     */
    public String manipulaTelefone() {

        this.trataTipoTelefoneSelecionado();

        if (this.telefone.getPk() == 0) {
            this.agente.setTelefone(this.telefone);
        }

        return "salvaManutencaoAgenteTelefone";
    }

//  ////////////////////////////////////////////////////////////////////////////
    /**
     * Trata o tipo de telefone selecionado na tela.
     */
    private void trataTipoTelefoneSelecionado() {

        if (this.tiposTelefone != null) {
            if (this.telefone == null ||
                    this.converteInteiro(this.tipoTelefoneSelecionado) !=
                    this.telefone.getPk()) {

                this.telefone.setTipoTelefone(this.getBuscaTipoTelefoneLista(
                        this.converteInteiro(this.tipoTelefoneSelecionado)));

            }

        }

    }
//  ////////////////////////////////////////////////////////////////////////////    
}

obrigado a ajuda.

6 Respostas

CintiaDR

Não entendi qual o problema

(Por favor, use as tags Code ao invés da quote para postar códigos)

T

se eu abro um browse e edito um registro, algum campo e movimento a tela através das telas de navegação do browser(voltar/avançar). se eu abrir um novo browser e rodar a aplicação e alterar o mesmo registro, eu vejo as informações que estão sendo alteradas no outro browser.

obrigado.

CintiaDR

tiralo:
se eu abro um browse e edito um registro, algum campo e movimento a tela através das telas de navegação do browser(voltar/avançar). se eu abrir um novo browser e rodar a aplicação e alterar o mesmo registro, eu vejo as informações que estão sendo alteradas no outro browser.

obrigado.

Quer dizer, você abre um registro (seja lá quais variáveis desse bean que vc tá usando) pede para alterar, NÃO SALVA NO BANCO, e quando você recupera em outra sessão (outra máquina/outro browser) mostra o que NÃO ESTÁ SALVO NO BANCO, e sim o que está na tela de edição do primeiro browser?? É isso?

Vc dá new desses tal desse atributo aonde?

T

é isso que acontece.

já tentei iniciar o bean no construtor.

para mostrar os dados, utilizo um dataTable, e tenho um commandLink para abrir o registro para edição.

para pegar o valor do atributo utilizo:

wb.src.bean.Bagente beanAgente =
                (wb.src.bean.Bagente) listaAgente.getRowData();
T

o projeto que estou fazendo é divido em 2, um para a camada de apresentação e outro para a camada de acesso ao banco de dados, onde estou utilizando hibernate.

quando eu fazia uma pesquisa, estava deixando a sessão do hibernate aberta, o problema estava ai.

obrigado a ajuda.

Kamikaze

Nuusss!!!

=P

ninja!

David Copperfield

Criado 28 de maio de 2008
Ultima resposta 28 de mai. de 2008
Respostas 6
Participantes 3