如何在JSF Managed Bean的构造函数中实现画面跳转?
我想在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
哪位强人告诉我出这个错误的原因?如何解决?
谢谢。