Cannot create a session after the response has been committed - Problemas com escopo

Pessoal,

Estou fazendo login usando o Spring Security e está funcionando sem problemas. O problema está no logout. Quando clico em logout, aparece esse erro:

Informações: Exception when handling error trying to reset the response.
java.lang.IllegalStateException: Cannot create a session after the response has been committed

Não é a primeira vez que esse erros aparece. Quando eu altero algum escopo dos meus controllers aparece esse erro.
O meu usuario controller utiliza SessionScoped e o resto dos meus controllers utiliza View Scoped, não posso alterar isso, mas quero consertar esse erro, se alguém puder me ajudar.

BOTAO:

 <p:menuitem value="Sair" icon="ui-icon ui-icon-power" 
                        action="#{usuarioController.logout}" ajax="false"/>     

CONTROLLER:

@ManagedBean(name = "usuarioController")
@SessionScoped
public final class UsuarioController implements Serializable {

private Usuario usuario;
    private UsuarioDao usuarioDao;    

    public UsuarioController() {
        usuario = new Usuario();
        usuarioDao = new UsuarioDaoImp();
        this.validarLogin();
    }
 //Valida o login com o Spring Security 3
    public void validarLogin() {        
        SecurityContext context = SecurityContextHolder.getContext();
        Authentication authentication = context.getAuthentication();

        if (context instanceof SecurityContext) {
            if (authentication instanceof Authentication) {
                usuario.setLogin(((User) authentication.getPrincipal()).getUsername());                
                usuario = usuarioDao.carregarUsuarioPeloLogin(usuario.getLogin());
            }
        }      
    }

    //Desloga o usuário logado - Spring Security 3
    public String logout() throws ServletException, IOException {                     
        
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        RequestDispatcher dispatcher = ((ServletRequest) ec.getRequest()).getRequestDispatcher("/j_spring_security_logout");
        dispatcher.forward((ServletRequest) ec.getRequest(), (ServletResponse) ec.getResponse());
        FacesContext.getCurrentInstance().responseComplete();

        return "login";
    } 
}

Todos os outros controllers estão utilizadno @ViewScoped e funcionam corretamente, o login funciona, o problema é o logout.

Olá estava com esse problema usando glassfish3.1 e JSF2.0 e primefaces.
Sempre que carregava minha pagina dava esse erro ai que voce mencionou…

Coloquei isso no web.xml e parou…

<context-param> 
<param-name>com.sun.faces.writeStateAtFormEnd</param-name> 
<param-value>false</param-value> 
</context-param>

Nas minhas pesquisas na net muitos diziam que era problema do glassfish testa ai vê se funciona…

1 curtida

Vou testar aqui. Já li na net de alterar o web.xml mesmo.
O problema é que eu não uso glassfish, to usando o tomcat 7.

Testa ai porque o seu erro era igual ao meu…

Funcionou

Valeu

Muito obrigado

Funcionou perfeitamente… me salvou essa dica!!! vlw

Cara, acho que tu salvou a vida de muita gente!

Obrigado!

Aparentemente funcionou aqui tb, vou testar a aplicação inteira aqui.

O Estranho é que eu comecei o projeto à 2 semanas e eu conseguia executa-lo perfeitamente ate ontem, ae hoje quando retornei ao trampo e resolvi mostrar ao cliente como a aplicação está ficando aconteceu isso -.-’.

Vlw pela ajuda ae

Bem, testei a aplicação inteira e a solução de patricia realmente funcionou.
Andei pesquisando sobre o parametro “com.sun.faces.writeStateAtFormEnd” para saber se não iria me causar problemas e descobri que esse erro na verdade e uma falha do próprio Majorra. Aparentemente páginas em que o form seja “pequeno” não ocorrerá o erro, já as paginas com forms “grandes” ocorrerá.

Peguem a versão 2.1.9 do Majorra que já resolve.

Deyhan, estou procurando como alterar o Mojarra, até agora sem sucesso.

Estou usando o JBOSS 7.1.1.
Você sabe algum link que mostre como se faz essa mudança?

obrigado desde já!

Isso não funciona apenas para o glassfish.
Estou usando JBoss 7.1.1 Brontes e estava com este problema.
Obrigado!

Solucionou o meu problema também. Muito obrigado.

[quote=drsmachado]Isso não funciona apenas para o glassfish.
Estou usando JBoss 7.1.1 Brontes e estava com este problema.
Obrigado![/quote]

UP!!!
Também estou usando o JBoss 7.1.1, solucionado!

[quote=patricia_java]Olá estava com esse problema usando glassfish3.1 e JSF2.0 e primefaces.
Sempre que carregava minha pagina dava esse erro ai que voce mencionou…

Coloquei isso no web.xml e parou…

<context-param> 
<param-name>com.sun.faces.writeStateAtFormEnd</param-name> 
<param-value>false</param-value> 
</context-param>

Nas minhas pesquisas na net muitos diziam que era problema do glassfish testa ai vê se funciona…[/quote]

Valeu pela dica, uso o JBoss 6 e o Tomcat 7.

Meu projeto estava funcionando bem ontem, hoje quando fui executá-lo aconteceu este erro. Sem motivo ou explicação, pois nada foi alterado no projeto.

Depois de alterar o web.xml com o código acima o projeto voltou a funcionar.

Agora outra dica, depois que o projeto volta a funcionar você pode apagar este código que ele continua funcionando. Vai entender…

[quote=braian][quote=drsmachado]Isso não funciona apenas para o glassfish.
Estou usando JBoss 7.1.1 Brontes e estava com este problema.
Obrigado![/quote]

UP!!!
Também estou usando o JBoss 7.1.1, solucionado![/quote]

Pra mim tbm funcionou com o JBoss 7.1.1!
Vlw a ajuda patricia_java.

Fala galera blz? Solucionou meu problema tbm, porém gostaria de saber o que nós fizemos colocando isso no web.xml. Alguem poderia responder minha pergunta?

Per the renderkit doc specification, the state information for the view will be written out prior to closing the form tag. However, it may be desirable to have the state information written out after the opening form tag. If this is the case, specifiy this parameter in the web.xml with a value of false.

Veja: AQUI!

[quote=gabriel.scarvalho]Deyhan, estou procurando como alterar o Mojarra, até agora sem sucesso.

Estou usando o JBOSS 7.1.1.
Você sabe algum link que mostre como se faz essa mudança?

obrigado desde já![/quote]

Opa, lendo este tópico me ajudou bastante também, as vezes rodamos até encontrar uma resposta.
Mas enfim, obrigado ai galera da comunidade, tem me ajudado muito também.

Gabriel, segue os links abaixo que me ajudou a configurar o Jboss pra consertar este problema da versão do mojarra.


http://stackoverflow.com/questions/17085717/upgrade-and-use-mojarra-as-the-jsf-implementation-with-jboss-server
https://www.liferay.com/pt/community/wiki/-/wiki/Main/Upgrading+Mojarra+in+JBoss+AS
https://issues.jboss.org/browse/AS7-4969

Atenciosamente,
Jesus

Bom dia, estou com o mesmo problema, tentei as soluções, mas nenhuma resolveu o meu problema.
Estou usando o JBOSS EAP 6.3