我正在为 JSF 实现运行一个带有 Richfaces 的 Seam Web 应用程序。我想将视图映射到特定的 URL,就像在 Url Map 中使用 Spring MVC 一样。
这是我的 /WEB-INF/pages.xml 的片段
<page view-id="*" scheme="http">
<navigation from-action="#{identity.logout}">
<redirect view-id="/content/index.xhtml"/>
</navigation>
</page>
<page view-id="/content/index.xhtml">
<rewrite pattern="/index"/>
</page>
所以,从这里可以看出,我的索引页面实际上位于 /content/index.xhtml。我遇到的问题是 Seam/JSF 出于某种奇怪的原因不喜欢这里的重定向。当我刚刚删除扩展时,我的这个工作正常,但是将它放入另一个目录似乎已经破坏了一些东西。对于那些好奇的人,我得到的例外是:
18:54:17,525 DEBUG [ExceptionFilter] exception root cause
java.lang.NullPointerException:FacesContext 在 org.ajax4jsf.context.AjaxContext.getCurrentInstance(AjaxContext.java:144) 的 org.ajax4jsf.component 的 org.ajax4jsf.context.AjaxContext.getCurrentInstance(AjaxContext.java:159) 为空。 AjaxViewRoot.getViewId(AjaxViewRoot.java:580) 在 org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:203) 在 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:108) 在 com.sun .faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:159) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245 ) 在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:第1148章.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at com.walterjwhite.webContent.servlet.filter.FirstVisitFilter.doFilter(FirstVisitFilter.java:55) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter .java:69)在 org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 com.walterjwhite。 seamCore.servlet.filter.security.SecurityFilter.doFilter(SecurityFilter.java:82) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 org.jboss.seam.web.IdentityFilter。 doFilter(IdentityFilter.java:40) 在 org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) 在 org.jboss.seam.servlet 的 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) .SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at com.walterjwhite.seamCore.servlet.filter.security.AuthenticationFailureEventFilter.doFilter(AuthenticationFailureEventFilter.java:77) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter (SeamFilter.java:69) 在 com.walterjwhite.seamCore.servlet.filter.security.IpAddressFilter.doFilter(IpAddressFilter.java:70) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69 ) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 org.jboss.seam 的 org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)。servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:510) at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53) 在 org.jboss.seam.servlet.SeamFilter $FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69 ) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) 在 org.mortbay.jetty.servlet 的 org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)。 ServletHandler.handle(ServletHandler.java:378) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 在 org.mortbay.jetty.handler.ContextHandler .handle(ContextHandler.java:765) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) 在 org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:334) 在 org. mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) 在 com.walterjwhite.webContent.servlet.filter.FirstVisitFilter.doFilter(FirstVisitFilter.java:49) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl。 doFilter(SeamFilter.java:69) at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at com .walterjwhite.seamCore.servlet。filter.security.SecurityFilter.doFilter(SecurityFilter.java:82) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter. java:40) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) 在 org.jboss.seam .servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at com.walterjwhite.seamCore.servlet.filter.security.AuthenticationFailureEventFilter.doFilter(AuthenticationFailureEventFilter.java:77) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl .doFilter(SeamFilter.java:69) 在 com.walterjwhite.seamCore.servlet.filter.security.IpAddressFilter.doFilter(IpAddressFilter.java:70) 在 org.jboss.seam.servlet。SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java: 69) 在 org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) 在 org.ajax4jsf.webapp.BaseFilter.handleRequest 的 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) (BaseFilter.java:290) 在 org.jboss.seam.web 的 org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495) 的 org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)。 Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)在组织。jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl。 doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org .mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler .java:181) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) 在 org.mortbay.jetty。 servlet.Dispatcher。forward(Dispatcher.java:334) at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) at com.walterjwhite.seamCore.servlet.filter.security.SecurityFilter.doFilter(SecurityFilter.java:62)在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) 在 org.jboss.seam.servlet.SeamFilter $FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69 ) 在 com.walterjwhite.seamCore.servlet.filter.security.AuthenticationFailureEventFilter.doFilter(AuthenticationFailureEventFilter.java:77) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 com。walterjwhite.seamCore.servlet.filter.security.IpAddressFilter.doFilter(IpAddressFilter.java:70) 在 org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) 在 org.jboss.seam.web。 ExceptionFilter.doFilter(ExceptionFilter.java:64) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.ContextFilter$1.process(ContextFilter.java:42 ) 在 org.jboss.seam.web.ContextFilter.doFilter(ContextFilter.java:37) 在 org.jboss.seam.servlet.SeamFilter$ 的 org.jboss.seam.servlet.ContextualHttpServletRequest.run(ContextualHttpServletRequest.java:53) FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:73) at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)在 org.jboss.seam。servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69) at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter. java:69) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) 在 org.mortbay.jetty 的 org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) .servlet.ServletHandler.handle(ServletHandler.java:378) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181 ) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) 在 org.mortbay.jetty.handler.ContextHandlerCollection。org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 的句柄(ContextHandlerCollection.java:230) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 的 org.mortbay .jetty.Server.handle(Server.java:324) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java: 324) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser .java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint。在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520) 运行(SelectChannelEndPoint.java:409)mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java: 324) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser .java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint。在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520) 运行(SelectChannelEndPoint.java:409)handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) at org.mortbay .jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.爪哇:520)handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) at org.mortbay .jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.爪哇:520)535)在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser .java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool$ PoolThread.run(QueuedThreadPool.java:520)535)在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser .java:212) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 在 org.mortbay.thread.QueuedThreadPool$ PoolThread.run(QueuedThreadPool.java:520)409) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)409) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)
我错过了一些非常小的东西,这可能吗?
我只是想将我的内容保存在一个单独的目录中,这样当某些东西不起作用时,我的打包战争更容易拆卸和诊断。
谢谢,
沃尔特