自动创建ManagedBean问题

时间:2010-06-11 12:54:42

标签: jsf

我需要在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)

1 个答案:

答案 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>

如果这不能解决您的实际功能需求,那么您需要在问题中更清楚地了解它。这听起来好像你正在寻找错误方向的解决方案。只要功能要求不明确,我们就无法建议正确的解决方案。