2010-06-11 7 views
1

J'ai besoin d'instancier manuellement un ManagedBean en code jsp. J'ai utilisé le code suivant:Problème de création automatique de ManagedBean

FacesContext context = FacesContext.getCurrentInstance(); 
    ActorBean bean = (ActorBean) context.getApplication().createValueBinding("#{actorBean}").getValue(context); 
    response.getWriter().print(bean.getChaine()); 

mais je reçois toujours une exception NullPointerException! . :( Toute suggestion s'il vous plaît

C'est le 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) 

Répondre

0

Il y a plusieurs idées fausses ici Un bean géré est une chose JSF et il faut le FacesContext être disponible dans la demande actuelle La FacesServlet est celui qui crée le FacesContext. sur la base stacktrace cette demande n'est pas transité par l'url-pattern du FacesServlet du tout. donc, FacesContext#getCurrentInstance() retournerait null et donc ce NullPointerException.

Si la demande a été passée par le FacesServlet, alors vous pouvez simplement faire #{actorBean} quelque part dans la page JSF et le bean sera automatiquement créé pour vous. Vous n'avez vraiment pas besoin de tracas avec scriptlets moche dans la page JSF.

Mais si vous ne voulez pas que ce soit une page JSF pour des raisons étranges, alors vous devrez vous replier vers l'ancienne approche <jsp:useBean> et oublier toute chose JSF. Sinon, cela ressemble beaucoup à ce que vous essayez de réinventer à votre façon, ce que JSF est déjà capable de faire. Utilisez l'un ou l'autre. Si cela ne résout pas votre problème fonctionnel actuel, alors vous devez être plus clair à ce sujet dans votre question. Cela ressemble vraiment à si vous cherchez une solution dans la mauvaise direction. Nous ne pouvons pas suggérer la bonne solution tant que l'exigence fonctionnelle n'est pas claire.

+0

L'idée principale est de pouvoir communiquer les valeurs JSF aux fonctions javascript. J'utilise un framework AJAX (EXT JS) et j'ai besoin de convertir des données en utilisant json API pour le communiquer dans un composant graphique d'EXTjs. Donc, le problème est .. Je suis coincé avec l'architecture JSF (MVC) et je ne peux pas accéder aux données uniquement via ManagedBeans. Ceci est un exemple de ce que je veux faire: Ext.onReady (function() { Ext.MessageBox.alert ('# {bean.prop}'); }); Mais il est impossible pour javascript d'évaluer les valeurs jsf. C'est possible avec jsp. Ce sera plus compliqué lors de l'utilisation de convertisseurs JSON et ainsi de suite. – Debbech

+0

Vous avez vraiment besoin de faire passer la requête à travers le 'FacesServlet'. Faites-en une page JSF. Ensuite, vous pouvez simplement utiliser ''. Vous pouvez également passer de JSP à Facelets. Ensuite, vous pouvez utiliser '# {bean.prop}' inline. Voir aussi [Java/JSP/JSF et JavaScript] (http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html). – BalusC

+0

Merci, je reçois l'idée principale, mais je reçois encore var vide du serveur Lorsque je tente de montrer cela: var variableFromServer = '' avez-vous idée pourquoi? – Debbech

Questions connexes