2010-10-02 8 views
2

Je tente de naviguer vers une autre page avec redirection en affectant une règle de navigation. La page Web que j'essaie de rediriger fonctionne très bien lorsqu'elle est appelée directement.étrange comportement de redirection jsf

Quand je mets le eDirection à une page jsp qui comprend simplement un message <jsp:forward page="faces/another.xhtml" /> dans, je reçois ce NullPointerException suivant et redirection échoue:

java.lang.NullPointerException 
    at org.icefaces.util.EnvUtils.isICEfacesView(EnvUtils.java:69) 
    at org.icefaces.event.BridgeSetup.processEvent(BridgeSetup.java:66) 
    at javax.faces.event.SystemEvent.processListener(SystemEvent.java:102) 
    at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:1993) 
    at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:1969) 
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:299) 
    at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:243) 
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:114) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 
03.Eki.2010 02:07:58 org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.NullPointerException 
    at javax.faces.component.UIViewRoot.getViewMap(UIViewRoot.java:1523) 
    at javax.faces.component.UIViewRoot.getViewMap(UIViewRoot.java:1487) 
    at org.icefaces.util.EnvUtils.isICEfacesView(EnvUtils.java:70) 
    at org.icefaces.context.DOMPartialViewContext.getPartialResponseWriter(DOMPartialViewContext.java:97) 
    at org.icefaces.context.DOMPartialViewContext.getPartialResponseWriter(DOMPartialViewContext.java:95) 
    at com.sun.faces.context.AjaxExceptionHandlerImpl.handlePartialResponseError(AjaxExceptionHandlerImpl.java:190) 
    at com.sun.faces.context.AjaxExceptionHandlerImpl.handle(AjaxExceptionHandlerImpl.java:119) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119) 
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    at java.lang.Thread.run(Unknown Source) 

Ensuite, je mets la règle de navigation directement à /faces/another.xhtml. la redirection est réussie, mais le message d'avertissement suivant s'affiche:

 
WARNING: JSF1015: Request path '/faces/another.xhtml' begins with one or more 
occurrences of the FacesServlet prefix path mapping '/faces'. 

Selon vous, quelle est la bonne façon de configurer la navigation? Merci beaucoup.

Répondre

3

Apparemment, vous êtes déjà dans le contexte JSF. Supprimez le préfixe /faces de l'URL.

<jsp:forward page="another.xhtml" /> 

Notez que vous ne redirigez pas ici, mais que vous transférez simplement la requête vers une autre source. Une redirection indique essentiellement au client d'envoyer une toute nouvelle requête HTTP au serveur dont l'URL est ensuite reflétée dans la barre d'adresse du navigateur. Une redirection est normalement effectuée par ExternalContext#redirect() dans la méthode d'action de bean (qui est sous les couvertures appelant HttpServletResponse#sendRedirect() puis FacesContext#responseComplete()), ou en ajoutant une entrée <redirect/> au <navigation-case> dans faces-config.xml.

+0

merci pour votre réponse. J'ai également eu une certaine confusion à propos de l'URL qui n'apparaissait pas dans la barre d'adresse. maintenant je suis clair. – artsince

+0

De rien. – BalusC