NullPointerException d'Erreur lorsque vous essayez d'obtenir une valeur à partir d'un Autre Bean dans le JSF
J'ai deux backing beans:
Login
: un haricot qui valide l'utilisateur les informations de connexion (nom d'utilisateur et mot de passe) avec table de base de données.Buss_Services
: un autre bean qui effectue des services d'affaires.
J'ai besoin d'obtenir l'ID utilisateur de la Login
de haricot et de l'utiliser à l'intérieur de la Buss_Services
. Elle est stockée dans une propriété de type Chaîne de Login
et la Buss_Services
besoins de cette valeur sur la piste de l'utilisateur actuellement connecté et mise à jour de la DB.
Voici la Login
backing bean:
@ManagedBean(name="Login")
@SessionScoped
public class Login {
private String loggedUserID;
public Object logCB_action() {
try {
//...
rs = stmt.executeQuery(SQL);
while (rs.next()) {
if (rs.getString("USER_NAME").equals(uname)) {
if (rs.getString("USER_PW").equals(pword)) {
//Here, the user ID is set.
loggedUserID=rs.getString("USER_ID");//This line ...
System.out.println("Logged User (ID): "+ userID);
return ("displayApp");
}
}
}
}
//...
}
public String getLoggedID() {
//Here, the user ID is returned.
String id = loggedUserID;
return (id);
}
}
Voici la Buss_Services
backing bean qui appelle à la getLoggedID()
méthode:
@ManagedBean(name="Buss_Services")
@SessionScoped
public class Buss_Services {
@ManagedProperty("#{Login}")
private Login login;
public void newEst_action() {
//The following line throws NullPointerException.
System.out.println("Logged User (ID): " + login.getLoggedID());
}
//Getters/setters.
}
C'est la trace de la pile qui j'obtiens quand j'essaie d'accéder à la prestation de services page:
javax.faces.el.EvaluationException:
//C:/Users/Sultan09/AppData/Roaming/JDeveloper/system11.1.2.0.38.60.17/o.j2ee/drs/TheOCES/OCES.ViewControllerWebApp.war/App_Business_SerivesPG.jsf @68,140 action="#{backingBeanScope.App_BServPG_Bean.newEst_action}": java.lang.NullPointerException
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:51)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at org.apache.myfaces.trinidad.component.UIXCommand.broadcast(UIXCommand.java:190)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:965)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:346)
at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:204)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:173)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:121)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:468)
at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter(TrinidadFilterImpl.java:468)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:293)
at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:199)
at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:313)
at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413)
at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94)
at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161)
at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178
Caused by: java.lang.NullPointerException
at JavaView.backing.Buss_Services.newEst_action(Buss_Services.java:172)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(Unknown Source)
at com.sun.el.MethodExpressionImpl.invoke(Unknown Source)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at org.apache.myfaces.trinidad.component.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:46)
... 44 more
Comment est-il la cause et comment puis-je le résoudre?
Mise à JOUR :
Selon les commentaires ici et personnels de recherche sur des problèmes similaires à celui indiqué ici, le Problème est Enfin résolu ,dieu merci.
La solution était que je devais:
- ajouter le
<managed-property>
de connexion à la adfc-config.xml fichier . - plus important encore , obtenir le
loggedUserID
à l'intérieur d'un@PostConstruct
enrichies méthode init() . Merci tout le monde.
- Au lieu d'utiliser
HtmlInputText
, pourquoi n'utilisez-vous pasString
directement. - J'ai Essayé celui-là , même problème malheureusement ...
Vous devez vous connecter pour publier un commentaire.
Un
NullPointerException
sur cette ligne n'a que la seule cause possible,login
estnull
. Compte tenu du fait que la@ManagedProperty
a l'air bien, cela ne peut avoir qu'une cause possible: la méthode settersetLogin()
est cassé. Assurez-vous qu'il ressemble exactement à cela:et donc pas
ou quelque chose d'autre.
Mise à jour que par les commentaires:
Enfin, il est la cause de votre problème. Configuration dans
faces-config.xml
remplace tous JSF2 annotations sur le haricot en question. Vous avez apparemment pas configuré le<managed-property>
dans lefaces-config.xml
. Vous avez 2 options:Supprimer l'ensemble
<managed-bean>
de configuration dansfaces-config.xml
. Le point de l'ensemble de la nouvelle-JSF 2.x annotations comme@ManagedBean
,@ManagedProperty
, etc est-à - se débarrasser de verbose JSF 1.x style de configuration XML.Ajouter un
<managed-property>
valeur de#{Login}
à la<managed-bean>
deBuss_Services
.Sans rapport avec au problème concret. Vous avez plusieurs de graves lacunes dans la conception et le style de code.
Vous devriez pas référence
UIComponent
s comme des propriétés. Au lieu de cela, vous devriez faire référence à ses valeurs. Garder le modèle aussi simple que possible et de ne jamais utiliserUIComponent
sauf si vous avez vraiment une raison valable. E. g.Votre login de validation de la méthode est inefficace. Il semble pour transporter l'ensemble de la table des utilisateurs à partir de DB en Java est la mémoire dans laquelle vous tester chaque ligne individuelle. Vous devriez essayer d'écrire et d'affiner la requête SQL, autant que possible, de sorte qu'elle retourne exactement les informations que vous recherchez.
Votre PHP code style totalement contredit la Conventions De Nommage Java. Elle rend le code plus difficile à lire et à maintenir par tous les autres développeurs Java, tels que ceux qui attendent des réponses lorsque vous affichez le code sur Internet, comme ici. Les noms de Package doivent être en minuscules. Souligne ne sont valables que dans les constantes, pour tous les autres noms de CamelCase doit être utilisé. Les noms d'Instance (comme managed bean noms) doit commencer avec une lettre minuscule. Etcetera.
login
est clairementnull
à ce point. Est lesetLogin()
la méthode jamais invoquée sur le haricot de construction? Est le@ManagedBean
l'annotation de lajavax.faces.bean
paquet? (et donc pasjavax.annotation
package).setLogin()
méthode parce que vous avez un@ManagedProperty
. Vous avez besoin de vérifier si la méthode est appelée. Mettre un debug breanpoint sur elle ou d'ajouter unSystem.out.println()
/logger.debug()
ligne.setLogin()
méthode.login
. Il semble que le concept de "débogage" est complètement nouveau pour vous. Je vous suggérons d'en apprendre plus à ce sujet. Débogage de coeur revient vers le bas pour le suivi de l'exécution de code ligne par ligne et de vérifier les méthodes qui sont tous invoquée et les variables qui sont tous dans la pile, etc. Il en résulte des informations très utiles sur ce qui se passe pendant l'exécution de code.@ManagedProperty
est donc tout simplement jamais été invoquée. La seule cause raisonnable pour ce qui peut être, c'est que@ManagedBean
n'est pas dejavax.faces.bean
paquet. Mais dans votre cas, le problème semble plus profond. Ce JSF impl/version exactement utilisez-vous? Ce Weblogic version exactement utilisez-vous? Avez-vous redéfinir les haricots dans defaces-config.xml
ou pas?HtmlInputText
au lieu deString
ouLong
pour conserver la valeur.faces-config.xml
approche pour gérer les haricots au lieu de les annotations? Si vous avez fait cela parce que les annotations ne fonctionne pas, alors cela indique qu'il ya vraiment beaucoup plus de mal dans votre webapp.Ok NullPointerException est très générale de la classe d'erreurs qui n'ont rien à voir avec la jsf ou de votre base de données de la couche d'accès etc en particulier. Et aussi loin que je peux voir à partir de la stacktrace il est en train d'être levée à partir de l'intérieur de newEst_action fonction pour laquelle vous n'avez pas fourni de code. Aller à la ligne dans cette fonction c'est à dire 172 et voir si vous faites quelque chose comme
sans vérifier que l'objet pourrait être nulle,elle risque de jeter NPE si monobjet est nulle, donc faire quelque chose comme
Veuillez vérifier si votre ManagedProperty
login
n'est pas null, lorsque vous imprimez à l'id.et essayer
@ManagedProperty(value = "#{Login}")
!get_final_logged_ID()