2010-10-02 62 views
2

我尝试通过分配导航规则导航到具有重定向的另一个页面。 我尝试重定向的网页在直接调用时工作得很好。奇怪的jsf重定向行为

当我设置edirection到JSP页面它只是包括它<jsp:forward page="faces/another.xhtml" />消息,我得到这个以下NullPointerException异常和重定向失败:

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) 

然后我直接设置导航规则/faces/another.xhtml。重定向是成功的,但我得到以下警告消息:

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

你认为什么是设置导航的正确方法? 非常感谢。

回答

3

显然你已经在JSF上下文中。从URL中删除/faces前缀。

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

请注意,您并未在此处重定向,而只是将请求转发给其他来源。重定向基本上指示客户端向服务器发出一个全新的HTTP请求,该服务器的URL然后反映在浏览器地址栏中。重定向通常是由豆的操作方法中的ExternalContext#redirect()完成的(在调用HttpServletResponse#sendRedirect()FacesContext#responseComplete()的覆盖下),或者通过在faces-config.xml中将<redirect/>条目添加到<navigation-case>

+0

谢谢你的回答。我对地址栏中没有显示的网址也有一些疑惑。现在我清楚了。 – artsince 2010-10-02 23:28:17

+0

不客气。 – BalusC 2010-10-02 23:31:29