【问题标题】:strange jsf redirect behaviour奇怪的 jsf 重定向行为
【发布时间】:2010-10-02 23:12:43
【问题描述】:

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

当我将 edirection 设置为仅包含 <jsp:forward page="faces/another.xhtml" /> 消息的 jsp 页面时,我得到以下 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。重定向成功,但我收到以下警告消息:

警告:JSF1015:请求路径“/faces/another.xhtml”以一个或多个开头 FacesServlet 前缀路径映射“/faces”的出现。

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

【问题讨论】:

    标签: jsf navigation redirect


    【解决方案1】:

    显然你已经在 J​​SF 上下文中了。从 URL 中删除 /faces 前缀。

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

    请注意,您不是在此处重定向,而是将请求转发到不同的来源。重定向基本上指示客户端向服务器发出全新的 HTTP 请求,然后其 URL 会反映在浏览器地址栏中。重定向通常由 bean 的操作方法中的ExternalContext#redirect() 完成(在后台调用HttpServletResponse#sendRedirect(),然后调用FacesContext#responseComplete()),或者通过在faces-config.xml 中的&lt;navigation-case&gt; 中添加&lt;redirect/&gt; 条目来完成。

    【讨论】:

    • 感谢您的回答。我也对地址栏中未显示的网址有些困惑。现在我清楚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2023-03-11
    相关资源
    最近更新 更多