NullPointerException-Fehler beim Versuch, einen Wert aus einer Anderen Bean in JSF
Habe ich zwei backing beans:
Login
: eine Bohne, die validiert die Benutzer-login-Informationen (Benutzername und Passwort), mit Datenbank-Tabelle.Buss_Services
: eine andere bean, führt einige business-services.
Ich brauche, um die Benutzer-ID aus der Login
bean und verwenden es im Buss_Services
. Es ist gespeichert in einer String Eigenschaft von Login
und die Buss_Services
muss dieser Wert zu verfolgen, die derzeit angemeldeten Benutzer und update der DB.
Hier ist die 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);
}
}
Hier ist die Buss_Services
backing bean, welche Anrufe die getLoggedID()
Methode:
@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.
}
Dies ist die Stapelüberwachung, die ich bekomme, wenn ich versuche, auf die bussiness-Dienste Seite:
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
Wie ist das verursacht und wie kann ich es lösen?
UPDATE :
Als pro-Kommentare hier und die persönliche Suche auf ähnliche Probleme auf die man hier gesagt hat, das Problem ist Endlich gelöst ,Gott sei Dank.
Die Lösung war, dass ich hatte:
- fügen Sie die
<managed-property>
login, um die adfc-config.xml Datei . - noch wichtiger ist , erhalten Sie die
loggedUserID
innerhalb einer@PostConstruct
anotated Methode init() . Danke jeder.
HtmlInputText
, warum nutzen Sie nicht String
direkt.Das habe ich Versucht , gleiche problem leider ...
InformationsquelleAutor user1092784 | 2011-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
NullPointerException
auf dieser Linie hat als die einzige mögliche Ursache, dasslogin
istnull
. Angesichts der Tatsache, dass die@ManagedProperty
sieht gut aus, das kann nur eine mögliche Ursache: die setter-MethodesetLogin()
ist gebrochen. Stellen Sie sicher, dass es genau so Aussehen:und damit nicht
oder etwas anderes.
Update wie pro die Kommentare:
Schließlich ist es die Ursache für Ihr problem. Konfiguration in
faces-config.xml
überschreibt alle JSF2 Anmerkungen auf die Bohne in Frage. Sie haben offenbar nicht konfiguriert<managed-property>
imfaces-config.xml
. Sie haben 2 Optionen:Entfernen Sie das gesamte
<managed-bean>
Konfiguration infaces-config.xml
. Der ganze Sinn der neuen JSF-2.x Anmerkungen wie@ManagedBean
,@ManagedProperty
usw ist loszuwerden von verbose JSF 1.x-Stil XML-Konfiguration.Hinzufügen
<managed-property>
Wert von#{Login}
zu den<managed-bean>
vonBuss_Services
.Unabhängigen zu dem konkreten problem. Haben Sie mehrere schwerwiegende Fehler in code und design-Stil.
Sollten Sie nicht Referenz
UIComponent
s als Eigenschaften. Stattdessen sollten Sie auf Ihre Werte. Halten Sie das Modell so einfach wie möglich und verwenden Sie niemalsUIComponent
es sei denn, Sie haben einen wirklich triftigen Grund. E. g.Ihre login-Validierung Methode ist ineffizient. Es scheint, schleppen die gesamte Tabelle users aus der DB in Java der Speicher, wobei Sie testen jede einzelne Zeile. Sie sollten versuchen, zu schreiben und Feineinstellungen der SQL-Abfrage so viel wie möglich, so dass es gibt genau die Informationen, die Sie suchen.
Ihre PHP-wie code-Stil völlig widerspricht dem Java-Namenskonventionen. Es macht den code schwerer zu Lesen und zu verwalten, die von allen anderen Java-Entwicklern, wie diejenigen aus, die Sie erwarten Antworten, wenn Sie nach dem code im Internet, wie hier. Package-Namen sollten nur Kleinbuchstaben enthalten. Unterstriche sind nur gültig in Konstanten, für alle anderen Namen CamelCase verwendet werden soll. Instanz-Namen (wie managed-bean-Namen) beginnen mit Kleinbuchstaben. Etcetera.
JSF sollte genannt haben
setLogin()
Methode, weil Sie eine@ManagedProperty
. Sie brauchen, um zu überprüfen, ob die Methode aufgerufen wird. Legen Sie eine debug-breanpoint oder fügen Sie einSystem.out.println()
/logger.debug()
Linie.Die variable von Interesse,
login
. Es scheint, dass der Begriff "debugging" ist komplett neu für Sie. Ich schlage vor, Sie lernen mehr darüber. Debugging im Grunde läuft darauf hinaus, die Verfolgung der Ausführung von code Zeile für Zeile und prüfen, welche Methoden sind alle aufgerufen, und die Variablen sind alle in den stack, etc. Das Ergebnis sind sehr nützliche Informationen, was eigentlich passiert, während der code-Ausführung.Okay, das erklärt es. Die
@ManagedProperty
ist so einfach nie aufgerufen. Die einzige vernünftige Ursache für das sein kann, dass@ManagedBean
ist nicht vonjavax.faces.bean
Paket. Aber in deinem Fall scheint das problem tiefer. Was JSF-impl/version genau benutzt du? Welche Weblogic version genau benutzt du? Hast du definieren Sie die Bohnen infaces-config.xml
oder nicht?Ich aktualisiert meine Antwort.
InformationsquelleAutor BalusC
Ok NullPointerException ist eine sehr Allgemeine Klasse von Fehlern, die nichts zu tun haben mit jsf oder Ihren Zugriff auf die db Schicht etc insbesondere. Und soweit ich sehen kann, aus dem stacktrace ist es ausgelöst wird, von innen newEst_action Funktion, für die Sie nicht vorgesehen haben jeden code. Gehen Sie zu der bestimmten Zeile in der Funktion ist also 172 und sehen, wenn Sie etwas wie
ohne Prüfung, dass das Objekt null sein,es könnte NPE werfen, wenn myObject null ist, so etwas wie
die .get_final_logged_ID() sollte den Wert von logged_user_ID... weiter Zu erklären , Die Logged_user_ID HTML (inputtext) ist ein Wert gesetzt, wenn eine gültige Benutzername - /Kennwort-Kamm akzeptiert wird , in den gleichen code-block meine ich. überprüfen Sie die Login-calss wieder , hoffe es klärt es mehr.
oK, ich denke, wir können Kochen Sie es nach unten, um login ist null und es kann viele Gründe dafür... man offensichtlich eine, die man sehen kann, ist Sie noch nicht über ein setLogin () - Methode für die verwaltete Eigenschaft. Versuchen Sie, hinzufügen public void setLogin(Login Login){dieses.login=login;}
Ich habe sowohl eine get-und eine setLogin Methoden , immer noch der gleiche Fehler !!
InformationsquelleAutor FUD
Bitte prüfen Sie, ob Ihr ManagedProperty
login
ist nicht null, wenn Sie die Druck id.und versuchen
@ManagedProperty(value = "#{Login}")
!sehen bearbeitet, ich denke die Bohne ist null, nicht der
get_final_logged_ID()
InformationsquelleAutor jk2