Jsf 自动创建ManagedBean问题

Jsf 自动创建ManagedBean问题,jsf,Jsf,我需要在jsp代码中手动实例化ManagedBean。我使用了以下代码: FacesContext context = FacesContext.getCurrentInstance(); ActorBean bean = (ActorBean) context.getApplication().createValueBinding("#{actorBean}").getValue(context); response.getWriter().print(bean.getChaine(

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

这里有几个误解。托管bean是JSF的东西,它需要
FacesContext
在当前请求中可用。
FacesServlet
是创建
FacesContext
的bean。基于stacktrace,此请求不会通过
FacesServlet
。因此
FacesContext#getCurrentInstance()
将返回
null
,因此该
NullPointerException

如果请求通过
FacesServlet
,那么您可以在JSF页面中的某个地方执行
{actorBean}
,bean将自动为您创建。您真的不需要在JSF页面中处理难看的脚本

但是,如果出于某些奇怪的原因,您不想让它成为JSF页面,那么您需要退回到老式的
方法,忘记整个JSF。否则,它看起来很像是您试图以自己的方式重新创造JSF已经具备的功能。使用其中之一或另一个

<jsp:useBean id="actorBean" class="com.example.ActorBean" />
...
<p>${actorBean.someProperty}</p>

...
${actorBean.someProperty}


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

主要思想是能够将JSF值传达给javascript函数。我使用的是AJAX框架(EXT JS),我需要使用json API转换数据,以在EXTjs的图形组件中进行通信。所以问题是..我被JSF体系结构(MVC)所困扰,无法仅通过ManagedBeans访问数据。这是我想要做的一个示例:EXT.onReady(function(){Ext.MessageBox.alert('#{bean.prop}');});但是javascript不可能评估jsf值。jsp也可以。在使用JSON转换器等时会更复杂。您确实需要将请求通过
FacesServlet
。将其设置为jsf页面。然后您可以使用
。或者,从jsp升级到Facelets。然后您可以使用
{bean.prop}
inline。另请参阅。谢谢,我明白了主要意思,但当我尝试显示以下内容时,我仍然从服务器接收到空的var:var variableFromServer=''您知道为什么吗?那么它只是没有设置,或者您正在处理另一个bean,或者您不在JSF上下文中。我仔细检查了一下,我确信:该属性是在ManagedBe内部设置的一个和被调用bean的集合是正确的。但是我怎样才能确保在JSF上下文中im是正确的呢?