eltonads 2 de set. de 2010
Já tentou sem o "throw new ServletException(e); " ?
apalmeira 2 de set. de 2010
Sim!
Está no código.
Tentei também configurar uma pagina de erro no web.xml, mas esta parecendo esse erro:
java.lang.IllegalStateException: Cannot reset buffer after response has been committed
renanskz 3 de set. de 2010
Faça no seu faces-config.xml
<navigation-rule>
<from-view-id> *</from-view-id>
<navigation-case>
<from-outcome> errorPage</from-outcome>
<to-view-id> /Erro.jsf</to-view-id>
</navigation-case>
<navigation-rule>
Isso fará com que da String "errorPage" uma regra de navegação universal para a página de erro
No seu filter, tente:
NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
nh.handleNavigation(facesContext, null, "errorPage");
Isso irá redirecionar para a página de erro. Caso contrário, pode tentar apenas a linha debaixo que tambem funcionará (pelo menos pra mim funciona).
FacesContext.getCurrentInstance().getExternalContext().redirect("/Erro.jsf");
apalmeira 3 de set. de 2010
Não funcionou apareceu a seguinte mensgem:
11 : 21 : 25 , 601 ERROR [[ Faces Servlet ]] Servlet . service () for servlet Faces Servlet threw exception
java . lang . NullPointerException
at br . com . lpc . ganymede . util . HibernateSessionfilter . doFilter ( HibernateSessionfilter . java : 30 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 235 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . jboss . web . tomcat . filters . ReplyHeaderFilter . doFilter ( ReplyHeaderFilter . java : 96 )
at org . apache . catalina . core . ApplicationFilterChain . internalDoFilter ( ApplicationFilterChain . java : 235 )
at org . apache . catalina . core . ApplicationFilterChain . doFilter ( ApplicationFilterChain . java : 206 )
at org . apache . catalina . core . StandardWrapperValve . invoke ( StandardWrapperValve . java : 235 )
at org . apache . catalina . core . StandardContextValve . invoke ( StandardContextValve . java : 191 )
at org . jboss . web . tomcat . security . SecurityAssociationValve . invoke ( SecurityAssociationValve . java : 190 )
at org . jboss . web . tomcat . security . JaccContextValve . invoke ( JaccContextValve . java : 92 )
at org . jboss . web . tomcat . security . SecurityContextEstablishmentValve . process ( SecurityContextEstablishmentValve . java : 126 )
at org . jboss . web . tomcat . security . SecurityContextEstablishmentValve . invoke ( SecurityContextEstablishmentValve . java : 70 )
at org . apache . catalina . core . StandardHostValve . invoke ( StandardHostValve . java : 127 )
at org . apache . catalina . valves . ErrorReportValve . invoke ( ErrorReportValve . java : 102 )
at org . jboss . web . tomcat . service . jca . CachedConnectionValve . invoke ( CachedConnectionValve . java : 158 )
at org . apache . catalina . core . StandardEngineValve . invoke ( StandardEngineValve . java : 109 )
at org . apache . catalina . connector . CoyoteAdapter . service ( CoyoteAdapter . java : 330 )
at org . apache . coyote . http11 . Http11Processor . process ( Http11Processor . java : 828 )
at org . apache . coyote . http11 . Http11Protocol$Http11ConnectionHandler . process ( Http11Protocol . java : 601 )
at org . apache . tomcat . util . net . JIoEndpoint$Worker . run ( JIoEndpoint . java : 447 )
at java . lang . Thread . run ( Unknown Source )
Meu Filter esta assim:
import java.io.IOException ;
import javax.faces.FacesException ;
import javax.faces.application.NavigationHandler ;
import javax.faces.context.FacesContext ;
import javax.servlet.Filter ;
import javax.servlet.FilterChain ;
import javax.servlet.FilterConfig ;
import javax.servlet.ServletException ;
import javax.servlet.ServletRequest ;
import javax.servlet.ServletResponse ;
public class HibernateSessionfilter implements Filter {
FacesContext facesContext ;
@Override
public void destroy () {
}
@Override
public void doFilter ( ServletRequest req , ServletResponse res ,
FilterChain fc ) throws IOException , ServletException , FacesException {
try {
HibernateUtil . beginTransaction ();
fc . doFilter ( req , res );
HibernateUtil . commitTransaction ();
} catch ( Exception e ) {
NavigationHandler nh = facesContext . getApplication (). getNavigationHandler ();
nh . handleNavigation ( facesContext , null , "errorPage" );
HibernateUtil . rollbackTransaction ();
throw new ServletException ( e );
} finally {
HibernateUtil . closeSession ();
}
}
@Override
public void init ( FilterConfig arg0 ) throws ServletException {
}
}
O Faces.config
....
<navigation-rule>
<from-view-id> *</from-view-id>
<navigation-case>
<from-outcome> errorPage</from-outcome>
<to-view-id> /erro.jsf</to-view-id>
</navigation-case>
</navigation-rule>
boaglio 3 de set. de 2010
apalmeira:
Sim!
Está no código.
Tentei também configurar uma pagina de erro no web.xml, mas esta parecendo esse erro:
java.lang.IllegalStateException: Cannot reset buffer after response has been committed
Vc não tirou o resp.sendRedirect, por isso deu esse erro.
Ele redireciona sozinho, não precisa fazer nada. No caso do JSF eu faço um tratamento a mais quando o JSFContext expira:
<!-- paginas de erro -->
<context-param>
<param-name> org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value> false</param-value>
</context-param>
<error-page>
<exception-type> javax.faces.application.ViewExpiredException</exception-type>
<location> /expiredPage.jsp</location>
</error-page>
<error-page>
<error-code> 404</error-code>
<location> /errors/404.html</location>
</error-page>
<error-page>
<error-code> 500</error-code>
<location> /errors/500.jsp</location>
</error-page>
apalmeira 3 de set. de 2010
Devo remover a linha fc.doFilter(req, res); ?
Vlw
apalmeira 3 de set. de 2010
boaglio,
Entendi o que você disse, foi referente ao primeiro post.
vou testar!
Obrigado!!!
apalmeira 3 de set. de 2010
boaglio,
Comentei a linha, agora está aparecendo esse erro.
14 : 00 : 31 , 786 ERROR [ [localhost ] ] Exception Processing ErrorPage [ exceptionType=javax.servlet.ServletException, location=/erro.jsf ]
java . lang . IllegalStateException : Cannot reset buffer after response has been committed
at org . apache . catalina . connector . Response . resetBuffer ( Response . java : 684 )
at org . apache . catalina . connector . Response . resetBuffer ( Response . java : 705 )
at org . apache . catalina . core . StandardHostValve . custom ( StandardHostValve . java : 409 )
at org . apache . catalina . core . StandardHostValve . throwable ( StandardHostValve . java : 270 )
at org . apache . catalina . core . StandardHostValve . invoke ( StandardHostValve . java : 141 )
at org . apache . catalina . valves . ErrorReportValve . invoke ( ErrorReportValve . java : 102 )
at org . jboss . web . tomcat . service . jca . CachedConnectionValve . invoke ( CachedConnectionValve . java : 158 )
at org . apache . catalina . core . StandardEngineValve . invoke ( StandardEngineValve . java : 109 )
at org . apache . catalina . connector . CoyoteAdapter . service ( CoyoteAdapter . java : 330 )
at org . apache . coyote . http11 . Http11Processor . process ( Http11Processor . java : 828 )
at org . apache . coyote . http11 . Http11Protocol $ Http11ConnectionHandler . process ( Http11Protocol . java : 601 )
at org . apache . tomcat . util . net . JIoEndpoint $ Worker . run ( JIoEndpoint . java : 447 )
at java . lang . Thread . run ( Unknown Source )
boaglio 3 de set. de 2010
Comentou a linha resp.sendRedirect(“erro.jsf”); ?
apalmeira 3 de set. de 2010
boaglio 3 de set. de 2010
Acho que você não comentou, pois o erro ainda indica: location=/erro.jsf
Pode ser cache, experimente limpar os diretórios log, temp, work do tomcat/jboss e teste novamente.
apalmeira 3 de set. de 2010
boaglio,
Fiz todos os procedimentos, mas nao resolveu!
Será que o location=/erro.jsf não é por causa do web.xml?
<error-page>
<exception-type> javax.faces.application.ViewExpiredException</exception-type>
<location> /erro.jsf</location>
</error-page>
<error-page>
<error-code> 404</error-code>
<location> /erro.jsf</location>
</error-page>
<error-page>
<error-code> 500</error-code>
<location> /erro.jsf</location>
</error-page>
<error-page>
<exception-type> javax.servlet.ServletException</exception-type>
<location> /erro.jsf</location>
</error-page>
Meu filter esta assim:
public class HibernateSessionfilter implements Filter {
@Override
public void destroy () {
}
public void doFilter ( ServletRequest req , ServletResponse res , FilterChain fc )
throws IOException , ServletException , FacesException {
try {
HibernateUtil . beginTransaction ();
fc . doFilter ( req , res );
HibernateUtil . commitTransaction ();
} catch ( Exception e ) {
HibernateUtil . rollbackTransaction ();
throw new ServletException ( e );
} finally {
HibernateUtil . closeSession ();
}
}
@Override
public void init ( FilterConfig arg0 ) throws ServletException {
}
}
boaglio 3 de set. de 2010
apalmeira:
boaglio,
Será que o location=/erro.jsf não é por causa do web.xml?
Sim, é isso, troque por .jsp ou html.
Essas páginas de erro não podem ter componentes JSF.
apalmeira 3 de set. de 2010
Não funcionou!
Você sabe o que isso quer dizer: java.lang.IllegalStateException: Cannot reset buffer after response has been committed
17 : 11 : 48 , 598 ERROR [ [localhost ] ] Exception Processing ErrorPage [ exceptionType=javax.servlet.ServletException, location=/erro.html ]
java . lang . IllegalStateException : Cannot reset buffer after response has been committed
at org . apache . catalina . connector . Response . resetBuffer ( Response . java : 684 )
at org . apache . catalina . connector . Response . resetBuffer ( Response . java : 705 )
at org . apache . catalina . core . StandardHostValve . custom ( StandardHostValve . java : 409 )
at org . apache . catalina . core . StandardHostValve . throwable ( StandardHostValve . java : 270 )
at org . apache . catalina . core . StandardHostValve . invoke ( StandardHostValve . java : 141 )
at org . apache . catalina . valves . ErrorReportValve . invoke ( ErrorReportValve . java : 102 )
at org . jboss . web . tomcat . service . jca . CachedConnectionValve . invoke ( CachedConnectionValve . java : 158 )
at org . apache . catalina . core . StandardEngineValve . invoke ( StandardEngineValve . java : 109 )
at org . apache . catalina . connector . CoyoteAdapter . service ( CoyoteAdapter . java : 330 )
at org . apache . coyote . http11 . Http11Processor . process ( Http11Processor . java : 828 )
at org . apache . coyote . http11 . Http11Protocol $ Http11ConnectionHandler . process ( Http11Protocol . java : 601 )
at org . apache . tomcat . util . net . JIoEndpoint $ Worker . run ( JIoEndpoint . java : 447 )
at java . lang . Thread . run ( Unknown Source )
Lucas_Abbatepaolo 14 de out. de 2011
boaglio:
apalmeira:
Sim!
Está no código.
Tentei também configurar uma pagina de erro no web.xml, mas esta parecendo esse erro:
java.lang.IllegalStateException: Cannot reset buffer after response has been committed
Vc não tirou o resp.sendRedirect, por isso deu esse erro.
Ele redireciona sozinho, não precisa fazer nada. No caso do JSF eu faço um tratamento a mais quando o JSFContext expira:
<!-- paginas de erro -->
<context-param>
<param-name> org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value> false</param-value>
</context-param>
<error-page>
<exception-type> javax.faces.application.ViewExpiredException</exception-type>
<location> /expiredPage.jsp</location>
</error-page>
<error-page>
<error-code> 404</error-code>
<location> /errors/404.html</location>
</error-page>
<error-page>
<error-code> 500</error-code>
<location> /errors/500.jsp</location>
</error-page>
Boa tarde!!
Você sabe me informar se esse redirecionamento direto no web.xml pode ser feito tambem no JSF 1.2??
Pois eu gostaria que se por algum motivo fosse lancada uma Exceção na minha aplicação fosse feito o redirecionamento para uma pagina. Meu web.xml esta assim
<context-param>
<param-name> org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value> false</param-value>
</context-param>
<error-page>
<exception-type> javax.faces.application.ViewExpiredException</exception-type>
<location> /login.jsf</location>
</error-page>
<error-page>
<error-code> 404</error-code>
<location> /errorpage.jsp</location>
</error-page>
<error-page>
<error-code> 500</error-code>
<location> /errorpage.jsp</location>
</error-page>
<error-page>
<exception-type> javax.servlet.ServletException</exception-type>
<location> /errorpage.jsp</location>
</error-page>
com esse trecho no meu web.xml o stackTrace não é mais exibido no navegador, porem a pagina exibida é a pagina de erro do navegador e não a especificada no meu web.xml…
Obrigado…