Session scoped MB e FacesContext

9 respostas
Hebert_Coelho

Estou recebendo essa mensagem aqui: IllegalStateException toda vez que adiciono uma mensagem para ser exibido em um growl do primefaces.

Código: context.addMessage(null, new FacesMessage(messageLevel, message, message));

Toda vez que executo esse código utilizando um SessionScopedBean eu tenho esse erro, mas se eu executo esse código em um RequestScopedBean funciona na moral.

Estou utilizando Mojara 2 Primefaces 3.

Alguma idéia?

Valeu! [=

9 Respostas

Kura

Bom dia, Hebert.
Você já sabe resolver essa situação?

Estou querendo adicionar uma validação no form, então coloquei um “required=true” no input e acabei recebendo esse illegalstateexception.
O controller, no meu caso , (eu acho, pois ainda estou aprendendo esses negócios de escopo) tem que ser ViewScoped.
Se eu mudar pra RequestScope ele não funciona.

Se eu não colocar o required no input, funciona normalmente.

Hebert_Coelho

Kura:
Bom dia, Hebert.
Você já sabe resolver essa situação?

Estou querendo adicionar uma validação no form, então coloquei um “required=true” no input e acabei recebendo esse illegalstateexception.
O controller, no meu caso , (eu acho, pois ainda estou aprendendo esses negócios de escopo) tem que ser ViewScoped.
Se eu mudar pra RequestScope ele não funciona.

Se eu não colocar o required no input, funciona normalmente.

Resolvi, mas faz tanto tempo que nem lembro. =/

Sorry.

Kura

aiuehuigahe

valeu, cara.

ow. Parabéns pelo lançamento do livro =)
Não sei se vc lançou por agora (eu só vi por agora), mas o que vale é a intenção, né? hjahahha

abraços

Hebert_Coelho

Kura:
aiuehuigahe

valeu, cara.

ow. Parabéns pelo lançamento do livro =)
Não sei se vc lançou por agora (eu só vi por agora), mas o que vale é a intenção, né? hjahahha

abraços

Valeu mano. [=

Kura

Cara.. Não sei se vc pode me ajudar..

Primeiro: Descobri o problema. Fiz um @Produces do FacesContext e estava injetando esse objeto como atributo de classe do controller. Sendo que o controller é ViewScoped e o FacesContext, RequestScoped.

Agora minha dúvida:
Estou conseguindo mostrar lindamente a mensagem depois de ter deletado a DI do faces e ter usado o FacesContext.getInstance().
Mas isso só quando eu continuo na mesma página.

Quando o usuário digitar um cpf inválido (ainda adicionarei outras validações, claro), ele fica na mesma página.
Quando estiver tudo certo, ele redireciona pra outra página.
Nessa outra página, não consigo mostrar a msg.
Tudo funciona normalmente. Apenas a msg não é mostrada.
E estou mostrando as msgs pelo p:growl do primefaces 3

Sabe como consigo fazer isso?

Segue o trecho em questão do meu bean:

public String save() {
        FacesMessage msg;
        if (!validaCpf(funcionario.getCpf())) {
            adicionaMsg(FacesMessage.SEVERITY_ERROR, "CPF Inválido!");
            return "form?codigoFilial=" + funcionario.getFilial().getCodigo()
                    + "&matricula=" + funcionario.getCodigo()
                    + "&faces-redirect=true";
        }
        funcionarioService.save(funcionario);
        adicionaMsg(FacesMessage.SEVERITY_INFO, "Funcionário alterado com sucesso!");
        return "/funcionarios?faces-redirect=true";
    }

    public void adicionaMsg(FacesMessage.Severity severity, String detalhe) {
        FacesMessage msg = new FacesMessage(severity, "", detalhe);
        FacesContext.getCurrentInstance().addMessage(null, msg);
        FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true);
    }
Hebert_Coelho

Eu tenho evitado responder questões de JSF pq levam muito tempo. =/

Uma coisa que ví é que você está usando ViewScoped com DI. Di não funciona cm ViewScoped.

Pode ser esse seu erro. Infelizmente não tenho como te ajudar mais. =/

Kura

hmmm.
que pena pq vc é o verdadeiro shaman do JSF! hahaha

Mas muito obrigado mesmo assim, cara! =)

Se eu descobrir, posto a solução.

Kura

Então, cara.
Achei a solução na sua página (http://uaihebert.com/?p=499).
Uma outra pessoa, num post mais específico, já havia me indicado, mas eu não havia entendido muito bem na hora.

Copiei e colei a classe MultiPageMessagesSupport e adicionei o lifecycle no faces-config.xml.
Funcionou lindamente.

Obrigado pela atenção! =D

Hebert_Coelho

Kura:
Então, cara.
Achei a solução na sua página (http://uaihebert.com/?p=499).
Uma outra pessoa, num post mais específico, já havia me indicado, mas eu não havia entendido muito bem na hora.

Copiei e colei a classe MultiPageMessagesSupport e adicionei o lifecycle no faces-config.xml.
Funcionou lindamente.

Obrigado pela atenção! =D

uia! boa! [=

Criado 26 de agosto de 2011
Ultima resposta 11 de mar. de 2013
Respostas 9
Participantes 2