【发布时间】:2014-01-12 12:45:30
【问题描述】:
我在 jsf 2.2 web 项目中使用 prime faces 4.0。我使用的模板包括页面的菜单栏和页脚部分。
我创建了一个名为 user 的文件夹,用于通过身份验证过滤器将未经授权的请求重定向到正确的页面来访问其下的页面。
但菜单栏上指向user文件夹下页面的链接会引发如下异常:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause
java.lang.NullPointerException
org.primefaces.renderkit.OutcomeTargetRenderer.getTargetURL(OutcomeTargetRenderer.java:80)
org.primefaces.component.menu.BaseMenuRenderer.encodeMenuItem(BaseMenuRenderer.java:148)
org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeElements(TieredMenuRenderer.java:103)
org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeSubmenu(TieredMenuRenderer.java:162)
org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeElements(TieredMenuRenderer.java:119)
org.primefaces.component.tieredmenu.TieredMenuRenderer.encodeMenu(TieredMenuRenderer.java:78)
org.primefaces.component.menubar.MenubarRenderer.encodeMarkup(MenubarRenderer.java:49)
org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:105)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:70)
org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:57)
org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:451)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.
Apache Tomcat/7.0.47
模板文件(WEB-INF目录下)下的菜单项如下:
<p:menuitem value="User Data" outcome="/user/userData" rendered="#{sessionBean.loggedIn}"/>
<p:menuitem icon="ui-icon-grip-dotted-vertical" rendered="#{sessionBean.loggedIn}"/>
<p:submenu label="Yardım" >
<p:menuitem value="About Us" outcome="about" icon="ui-icon-help" />
</p:submenu>
我无法访问user 文件夹下的userData.xhtml(和任何其他),并且出现上述异常。我在user文件夹下放置了一个纯html页面,我可以访问它。
我尝试了很多方法,但找不到问题所在。 任何帮助表示赞赏。
【问题讨论】:
-
我想是输入错误,但您需要为第一个
menuitem值加上括号。之前多次看到此错误,它只是告诉您其中一个结果未找到。 -
正如@XtremeBiker 所说,您应该将第一个
menuitem标记的value属性的双引号括起来,以便正确识别outcome及其后继属性。 -
其实是提问的时候打错了,不是代码上的。我在上面更正了。所以原因是别的。可能是因为我使用模板?
标签: jsf-2 primefaces navigation