我需要在jsp代码中手动实现ManagedBean。我使用了以下代码:
FacesContext context = FacesContext.getCurrentInstance();
ActorBean bean = (ActorBean) context.getApplication().createValueBinding("#{actorBean}").getValue(context);
response.getWriter().print(bean.getChaine());
但我仍然得到一个NullPointerException! :( 有任何建议请。
这是stacktracelog:
11 juin 2010 12:33:44 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet jsp a généré une exception
java.lang.NullPointerException
at org.apache.jsp.jspx.portal_jsp._jspService(portal_jsp.java:157)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:127)
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:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
答案 0 :(得分:0)
这里有几个误解。托管bean是JSF的东西,它要求FacesContext
在当前请求中可用。 FacesServlet
是创建FacesContext
的人。根据堆栈跟踪,此请求根本不会通过url-pattern
的{{1}}传递。因此FacesServlet
会返回FacesContext#getCurrentInstance()
,因此会返回null
。
如果请求是通过NullPointerException
传递的,那么你可以在JSF页面的某处做FacesServlet
,bean将为你自动处理。你真的不需要在JSF页面中使用丑陋的 scriptlet 。
但是如果由于某些奇怪的原因你不希望它成为JSF页面,那么你将需要回退到老式的#{actorBean}
方法并忘记整个JSF的事情。否则它看起来很像你正试图以自己的方式重新发明JSF已经具备的能力。使用其中一个。
<jsp:useBean>
如果这不能解决您的实际功能需求,那么您需要在问题中更清楚地了解它。这听起来好像你正在寻找错误方向的解决方案。只要功能要求不明确,我们就无法建议正确的解决方案。