2010-06-11 3 views
1

Мне нужно создать ManagedBean вручную в jsp-коде. Я использовал следующий код:Auto-create 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

Есть несколько заблуждений здесь Управляемым боб является JSF вещи, и это требует FacesContext быть доступными в настоящее время запроса FacesServlet является тот, который создает FacesContext. на основании StackTrace этот запрос не прошел через url-pattern в FacesServlet вообще. Так FacesContext#getCurrentInstance() вернется null и, следовательно, этот NullPointerException.

Если запрос был передан через FacesServlet, тогда вы можете просто сделать #{actorBean} где-то на странице JSF, и боб будет автоматически создан для вас. Вам действительно не нужно беспокоиться с уродливыми скриптлетами на странице JSF.

Но если вы не хотите, чтобы это была страница JSF по каким-то странным причинам, вам нужно вернуться к старомодному подходу <jsp:useBean> и забыть всю вещь JSF. В противном случае это выглядит так, что вы пытаетесь изобрести свой собственный путь тем же, что и JSF. Используйте тот или иной.

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

Если это не решит ваше фактическое функциональное требование, тогда вам нужно быть более ясным в этом вопросе. Это действительно звучит так, как будто вы ищете решение в неправильном направлении. Мы не можем предложить правильное решение, пока функциональные требования неясны.

+0

Основная идея состоит в том, чтобы иметь возможность передавать значения JSF в функции javascript. Я использую структуру AJAX (EXT JS), и мне нужно преобразовать данные с помощью json API, чтобы сообщить об этом в графическом компоненте EXTjs. Поэтому проблема в том, что я застрял в архитектуре JSF (MVC), и я не могу получить доступ к данным только через ManagedBeans. Это пример того, что я хочу сделать: Ext.onReady (function() { Ext.MessageBox.alert ('# {bean.prop}'); }); Но javascript не может оценить значения jsf. Это возможно с помощью jsp. Это будет сложнее при использовании преобразователей JSON и так далее. – Debbech

+0

Вы ** действительно ** должны иметь запрос, пройденный через 'FacesServlet'. Сделайте это страницей JSF. Тогда вы можете просто использовать ''. Кроме того, вы можете перейти с JSP на Facelets. Затем вы можете использовать '# {bean.prop}' inline. Также см. [Java/JSP/JSF и JavaScript] (http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html). – BalusC

+0

Спасибо, я получаю основную идею, но я все еще получаю пустой var от сервера. Когда я пытаюсь показать это: var variableFromServer = '' у вас есть идея почему? – Debbech

Смежные вопросы