如何在JSF Managed Bean的构造函数中实现画面跳转?

chncaesar 51信用卡 开发组长/高级工程师/技术专家  2006-03-09 03:34:08
我想在JSF Managed Bean的构造函数中根据DB取得内容决定跳往哪一个画面。

我试着在构造函数中用如下代码实现:
String forwardWorkNo = selfWorkNoRst[0][0].toString();
String forwardFlowID = selfWorkNoRst[0][1].toString();
System.out.println("/" + forwardFlowID + "/" + forwardFlowID +"_main.faces");
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ServletContext sc = (ServletContext )ec.getContext();
ServletRequest req = (ServletRequest)ec.getRequest();
RequestDispatcher rd = sc.getRequestDispatcher("/" + this.getFlowSetID() + "/" + forwardFlowID + "/" + forwardFlowID +"_main.faces");
rd.forward(req, (ServletResponse)ec.getResponse());
执行结果是:
HTTPステータス 500 -

--------------------------------------------------------------------------------

type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: javax.servlet.jsp.JspException: null
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:821)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.WF000064.WF000064_005fmain_jsp._jspService(WF000064_005fmain_jsp.java:81)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)


原因

java.lang.NullPointerException
com.sun.faces.util.Util.getValueBinding(Util.java:945)
com.sun.faces.taglib.html_basic.InputHiddenTag.setProperties(InputHiddenTag.java:135)
javax.faces.webapp.UIComponentTag.createComponent(UIComponentTag.java:1017)
javax.faces.webapp.UIComponentTag.createChild(UIComponentTag.java:1036)
javax.faces.webapp.UIComponentTag.findComponent(UIComponentTag.java:749)
javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:429)
com.sun.faces.taglib.html_basic.InputHiddenTag.doStartTag(InputHiddenTag.java:160)
org.apache.jsp.WF000064.WF000064_005fmain_jsp._jspx_meth_h_inputHidden_1(WF000064_005fmain_jsp.java:213)
org.apache.jsp.WF000064.WF000064_005fmain_jsp._jspx_meth_h_form_0(WF000064_005fmain_jsp.java:140)
org.apache.jsp.WF000064.WF000064_005fmain_jsp._jspx_meth_f_view_0(WF000064_005fmain_jsp.java:106)
org.apache.jsp.WF000064.WF000064_005fmain_jsp._jspService(WF000064_005fmain_jsp.java:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)


注意 原因のすべてのスタックトレースは、Apache Tomcat/5.0.28のログに記録されています


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

哪位强人告诉我出这个错误的原因?如何解决?
谢谢。
...全文
97 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chncaesar 2006-03-21
多谢。
我已经用导航能解决了。
回复
humanity 2006-03-11
你要跳转的话,因为已经进入了 Faces 生命周期了,所以 forward 所去的目标页面“不”需要再 xxx.faces 了, 直接用 xxx.jsp 就行了,这样就不会出现 NullPointerException("页面没有找到”)。
回复
humanity 2006-03-11
你要跳转的话,因为已经进入了 Faces 生命周期了,所以 forward 所到页面部需要在 xxx.faces 了, 直接用 xxx.jsp 就行了,这样就不会出现 NullPointerException("页面没有找到”)。

这样能照顾他们的 整个 生命周期的 事件和状态 :
FacesContext.getCurrentInstance().getViewRoot().setView("/login.jsp"); //最后的方法名字不记得。
FacesContext.getCurrentInstance().renderResponse();

还有:forward 之后就不应该做任何事情了,等着返回就是了,否则有些服务器上会出现死锁。
回复
zqznew 2006-03-09
最好用导航器.
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-03-09 03:34
社区公告
暂无公告