VRaptor, Sitemesh e sessao

5 respostas
igordeoliveirasa

Olá,

Estou utilizando o VRAPTOR com Sitemesh e localmente funciona perfeitamente. Quando subo para o servidor, Heroku, boa parte do sistema funciona perfeitamente, mas algumas partes simplesmente dão este erro:

java.lang.RuntimeException: org.apache.jasper.JasperException: javax.el.ELException: java.lang.IllegalStateException: No SessionManager
	at com.opensymphony.sitemesh.webapp.decorator.BaseWebAppDecorator.render(BaseWebAppDecorator.java:39)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:84)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1291)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:443)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:556)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1044)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:372)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:978)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
	at org.eclipse.jetty.server.Server.handle(Server.java:369)
	at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:486)
	at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:933)
	at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:995)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
	at java.lang.Thread.run(Thread.java:679)

Desabilitei o Sitemesh e percebi que sem o sitemesh o erro não acontece.

Segue minhas configuracoes do sitemesh:

<?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/WEB-INF/jsp/decorators">

    
    <excludes>
        <pattern>*itemFBLikeIFrame*</pattern>
        <pattern>*/gadash.jsp</pattern>
        <pattern>*/info/*</pattern>
        <pattern>*.html</pattern>
    </excludes>

    <decorator name="decorator_account" page="decorator_account.jsp">
        <pattern>/admin*</pattern>
        <pattern>/dashboard*</pattern>
        <pattern>/*.jsp</pattern>
    </decorator>

    <decorator name="decorator_store" page="decorator_store.jsp">
        <pattern>*</pattern>
        <pattern>/*</pattern>
    </decorator>

</decorators>

a pagina sendo acessada é: /loginOrRegister, ou seja, entra nas regras do decorator_store…

Outra informação, segue a instrução que me faz chegar no /loginOrRegister:

validator.checking(new Validations() { {
            that(customerSessionManager.isSignedIn(), "checkout.invalid", "checkout.not.signedIn");
        }} );
        validator.onErrorRedirectTo(StoreController.class).loginOrRegister();

Baseado nessas informações, vocês poderiam me ajudar?

Muito Obrigado

5 Respostas

Lucas_Cavalcanti

por ser um erro javax.el.ELException pode ser que seja em um dos seus decorators… deve ter alguma linha lá causando esse erro.

igordeoliveirasa

Lucas, obrigado, com a sua ajuda consegui descobrir o ponto!

é aqui:

<div id="error_container" class="alert alert-error">
                        <button type="button" class="close" data-dismiss="alert">&times;</button>
                        ${errors[0].message}
                    </div>

Porem o código está correto, mas se eu chamo onErrorRedirectTo da aquela exception. Caso eu chame onErrorForwardTo da certo.
Tem alguma explicação para isso? Solução também?..

Obrigado.

Lucas_Cavalcanti

se vc apaga esse código e dá um redirect to, funciona?

igordeoliveirasa

Sim, funciona Lucas… =/

Alguma idéia?

Obrigado…

Lucas_Cavalcanti

tenta, ao invés de fazer ${errors[0].message}, fazer um c:forEach na variável errors.

Criado 19 de julho de 2013
Ultima resposta 21 de jul. de 2013
Respostas 5
Participantes 2