Wenn Sie versuchen, eine verwaltete Bean in EL wie folgt zu referenzieren #{bean.entity.property}
, wird manchmal eine javax.el.PropertyNotFoundException: Target Unreachable
Ausnahme ausgelöst, normalerweise, wenn eine Bean-Eigenschaft festgelegt werden soll oder wenn eine Bean-Aktion aufgerufen werden soll.
Es scheint fünf verschiedene Arten von Nachrichten zu geben:
- Ziel nicht erreichbar, Bezeichner 'Bean' in Null aufgelöst
- Ziel nicht erreichbar, 'Entität' hat null zurückgegeben
- Ziel nicht erreichbar, 'null' hat null zurückgegeben
- Ziel nicht erreichbar, '' 0 '' hat null zurückgegeben
- Ziel nicht erreichbar, 'BracketSuffix' hat null zurückgegeben
Was bedeuten sie alle? Wie werden sie verursacht und wie sollen sie gelöst werden?
Class [ Lorg/mxchange/jfinancials/model/receipt/FinancialAdminReceiptSessionBeanRemote; ] not found. Error while loading [ cl ass org.mxchange.jfinancials.beans.financial.model.receipt.FinancialAdminReceiptWebRequestBean ]]]
Und dass bean (FinancialAdminReceiptWebRequestBean
) nicht sicher gefunden und gelöst werden konntenull
. Ein weiterer häufiger Fehler besteht darin, den Anwendungsserver nicht neu zu starten, nachdem z. B. Klassen / Schnittstellen umbenannt oder verschoben (oder vergessenclean
) wurden.Antworten:
1. Ziel nicht erreichbar, Bezeichner 'Bean' in Null aufgelöst
Dies läuft darauf hinaus, dass die verwaltete Bean-Instanz selbst nicht genau durch diesen Bezeichner (Name der verwalteten Bean) in EL gefunden werden konnte
#{bean}
.Die Identifizierung der Ursache kann in drei Schritte unterteilt werden:
ein. Wer verwaltet die Bohne?
b. Wie lautet der (Standard-) Name der verwalteten Bean?
c. Wo ist die Backing Bean Klasse?
1a. Wer verwaltet die Bohne?
Der erste Schritt wäre zu überprüfen, welches Bean-Management-Framework für die Verwaltung der Bean-Instanz verantwortlich ist. Ist es JSF über
@ManagedBean
? Oder ist es CDI über@Named
? Oder ist es Frühling über@Component
? Können Sie sicherstellen, dass Sie nicht mehrere Bean-Framework-spezifische Annotationen in derselben Backing-Bean-Klasse mischen? ZB@Named @Component
oder@Named @ManagedBean
oder@ManagedBean @Component
. Das ist falsch. Die Bean muss von höchstens einem Bean-Verwaltungsframework verwaltet werden, und dieses Framework muss ordnungsgemäß konfiguriert sein. Wenn Sie bereits keine Ahnung haben, welche Sie auswählen sollen, gehen Sie zu Backing Beans (@ManagedBean) oder CDI Beans (@Named). und Spring JSF-Integration: Wie füge ich eine Spring-Komponente / einen Spring-Service in eine JSF-verwaltete Bean ein?Für den Fall , es ist JSF , die über die Bohne ist die Verwaltung
@ManagedBean
, dann müssen Sie sicher , dass der folgende machen:Die
faces-config.xml
Root-Deklaration ist mit JSF 2.0 kompatibel. Also die XSD-Datei und dieversion
müssen also mindestens JSF 2.0 oder höher angeben und somit nicht 1.x.Für JSF 2.1 ersetzen Sie einfach
2_0
und2.0
durch2_1
und2.1
sind.Wenn Sie JSF 2.2 oder höher verwenden, stellen Sie sicher, dass Sie verwenden
xmlns.jcp.org
Namespaces anstelle vonjava.sun.com
überall verwenden.Für JSF 2.3 ersetzen Sie einfach
2_2
und2.2
durch2_3
und2.3
sind.Sie haben nicht versehentlich importiert
javax.annotation.ManagedBean
stattjavax.faces.bean.ManagedBean
. Achten Sie bei der automatischen Vervollständigung der IDE darauf, dass Eclipse den falschen als ersten Eintrag in der Liste automatisch empfiehlt.@ManagedBean
durch einen JSF 1.x-Stil überschrieben<managed-bean>
Eintrag im infaces-config.xml
derselben Backing-Bean-Klasse zusammen mit einem anderen Namen für verwaltete Beans . Dieser wird Vorrang vor haben@ManagedBean
. Das Registrieren einer verwalteten Bean infaces-config.xml
ist seit JSF 2.0 nicht erforderlich. Entfernen Sie sie einfach./META-INF/faces-config.xml
. Siehe auch Verweisen auf JSF-verwaltete Beans, die in einer JAR-Datei bereitgestellt werden.Wenn Sie tatsächlich das jurassic JSF 1.x verwenden und kein Upgrade durchführen können, müssen Sie die Bean über
<managed-bean>
infaces-config.xml
anstelle von registrieren@ManagedBean
. Vergessen Sie nicht, Ihren Projekterstellungspfad so festzulegen, dass Sie keine JSF 2.x-Bibliotheken mehr haben (damit die@ManagedBean
Annotation nicht verwirrend erfolgreich kompiliert wird).Für den Fall , es ist CDI , die über die Bohne ist die Verwaltung
@Named
, dann müssen Sie sicher , dass der folgende machen:CDI 1.0 (Java EE 6) benötigt eine
/WEB-INF/beans.xml
Datei, um CDI in WAR zu aktivieren. Es kann leer sein oder nur den folgenden Inhalt haben:CDI 1.1 (Java EE 7) ohne
beans.xml
oder eine leerebeans.xml
Datei oder mit dem oben genannten CDI 1.0-kompatiblenbeans.xml
Verhalten verhält sich genauso wie CDI 1.0. Wenn es ein CDI 1.1 kompatibel istbeans.xml
mit einem explizitenversion="1.1"
, dann wird es standardmäßig registriert nur@Named
Bohnen mit einer expliziten CDI Umfang Anmerkung wie@RequestScoped
,@ViewScoped
,@SessionScoped
,@ApplicationScoped
usw. Falls Sie beabsichtigt, alle Bohnen registrieren als CDI Bohnen verwaltet, auch solche ohne explizite Verwenden Sie für den CDI-Bereich das unten stehende CDI 1.1, das/WEB-INF/beans.xml
mitbean-discovery-mode="all"
set kompatibel ist (die Standardeinstellung istbean-discovery-mode="annotated"
).Stellen Sie bei Verwendung von CDI 1.1+ mit
bean-discovery-mode="annotated"
(Standard) sicher, dass Sie nicht versehentlich einen JSF-Bereich importiert haben, z. B.javax.faces.bean.RequestScoped
anstelle eines CDI-Bereichsjavax.enterprise.context.RequestScoped
. Achten Sie auf die automatische Vervollständigung der IDE.bean-discovery-mode="annotated"
(Standard) verwenden, müssen Sie Mojarra aufgrund eines Fehlers auf 2.3.3 oder neuer aktualisieren . In Fall können Sie nicht aktualisieren, dann müssen Sie entweder Satzbean-discovery-mode="all"
inbeans.xml
, oder die JSF 2.3 spezifischen setzen@FacesConfig
Anmerkung auf einer beliebigen Klasse in der WAR ( in der Regel eine Art von einem Start der Anwendung Klasse scoped).Wenn Sie CDI-verwaltete Beans für JSF-Ansichten in eine JAR packen, stellen Sie sicher, dass die JAR mindestens eine gültige
/META-INF/beans.xml
(die leer bleiben kann) hat.Wenn es Spring ist , der die Bean über verwaltet
@Component
, müssen Sie Folgendes sicherstellen:Spring wird gemäß seiner Dokumentation installiert und integriert . Wichtig ist, dass Sie mindestens Folgendes haben
web.xml
:Und das in
faces-config.xml
:(Vor allem ist alles, was ich in Bezug auf Spring weiß - ich mache Spring nicht - zögern Sie nicht, andere wahrscheinliche Spring-bezogene Ursachen zu bearbeiten / zu kommentieren, z. B. einige Probleme im Zusammenhang mit der XML-Konfiguration)
Im Fall ist es eine Repeater - Komponente , die den (verschachtelten) Bean über sein Managing
var
Attribut (zB<h:dataTable var="item">
,<ui:repeat var="item">
,<p:tabView var="item">
etc) , und Sie haben tatsächlich eine „Ziel nicht erreichbar, Kennung‚item‘gelöst null“, dann müssen Sie sicher , dass der folgende machen ::Auf das
#{item}
wird inbinding
attribtue einer untergeordneten Komponente nicht verwiesen . Dies ist falsch, da dasbinding
Attribut während der Ansichtserstellungszeit und nicht während der Ansichtsrenderzeit ausgeführt wird. Darüber hinaus gibt es physisch nur eine Komponente im Komponentenbaum, die bei jeder Iterationsrunde einfach wiederverwendet wird. Mit anderen Worten, Sie sollten tatsächlichbinding="#{bean.component}"
anstelle von verwendenbinding="#{item.component}"
. Aber viel besser ist es, die Komponenten-Bining-Funktion für Bean vollständig zu beseitigen und den richtigen Ansatz für das Problem zu untersuchen / zu erfragen, von dem Sie dachten, dass es auf diese Weise gelöst werden könnte. Siehe auch Wie funktioniert das Attribut 'Bindung' in JSF? Wann und wie soll es angewendet werden?1b. Wie lautet der (Standard-) Name der verwalteten Bean?
Der zweite Schritt wäre die Überprüfung des registrierten verwalteten Bean-Namens. JSF- und Spring-Verwendungskonventionen entsprechen der JavaBeans-Spezifikation, während CDI abhängig von CDI impl / version Ausnahmen aufweist.
Eine
FooBean
Backing Bean Klasse wie unten,wird in allen Bean-Management-Frameworks den Standardnamen für verwaltete Bean
#{fooBean}
gemäß JavaBeans-Spezifikation haben.Eine
FOOBean
Backing Bean Klasse wie unten,deren unqualifizierter Klassenname mit mindestens zwei Großbuchstaben beginnt, wird in JSF und Spring einen standardmäßig verwalteten Bean-Namen haben, der genau dem unqualifizierten Klassennamen
#{FOOBean}
entspricht. Entspricht auch der JavaBeans-Spezifikation. In CDI ist dies auch bei Schweißversionen der Fall, die vor Juni 2015 veröffentlicht wurden, jedoch nicht bei Schweißversionen, die nach Juni 2015 veröffentlicht wurden (2.2.14 / 2.3.0.B1 / 3.0.0.A9), oder bei OpenWebBeans aufgrund eines Versehens in CDI spec . In diesen Weld-Versionen und in allen OWB-Versionen wird nur das erste Zeichen in Kleinbuchstaben geschrieben#{fOOBean}
.Wenn Sie explizit einen verwalteten Bean-Namen
foo
wie unten angegeben haben,oder gleichwertig mit
@ManagedBean(name="foo")
oder@Component("foo")
, dann wird es nur von#{foo}
und somit nicht von verfügbar sein#{fooBean}
.1c. Wo ist die Backing Bean Klasse?
Der dritte Schritt wäre eine doppelte Überprüfung, wenn sich die Backing-Bean-Klasse an der richtigen Stelle in der erstellten und bereitgestellten WAR-Datei befindet. Stellen Sie sicher, dass Sie das Projekt und den Server vollständig bereinigt, neu erstellt, erneut bereitgestellt und neu gestartet haben, falls Sie tatsächlich mit dem Schreiben von Code beschäftigt waren und ungeduldig F5 im Browser gedrückt haben. Wenn dies immer noch vergebens ist, lassen Sie das Build-System eine WAR-Datei erstellen, die Sie dann extrahieren und mit einem ZIP-Tool überprüfen. Die kompilierte
.class
Datei der Backing-Bean-Klasse muss sich in ihrer Paketstruktur in befinden/WEB-INF/classes
. Wenn es als Teil eines JAR-Moduls gepackt ist,.class
muss sich die JAR, die die kompilierte Datei enthält, in/WEB-INF/lib
und daher nicht z. B. EARs/lib
oder anderswo befinden.Wenn Sie Eclipse verwenden, stellen Sie sicher, dass die Backing-Bean-Klasse aktiviert ist
src
und daher nichtWebContent
, und stellen Sie sicher, dass Projekt> Automatisch erstellen aktiviert ist. Wenn Sie Maven verwenden, stellen Sie sicher, dass sich die Backing-Bean-Klasse insrc/main/java
und somit nicht insrc/main/resources
oder befindetsrc/main/webapp
.Wenn Sie die Webanwendung als Teil einer EAR mit EJB + WAR (s) verpacken, müssen Sie sicherstellen, dass sich die Backing-Bean-Klassen im WAR-Modul und damit weder im EAR-Modul noch im EJB-Modul befinden. Die Business-Schicht (EJB) muss frei von Artefakten im Zusammenhang mit der Web-Schicht (WAR) sein, damit die Business-Schicht über mehrere verschiedene Web-Ebenen (JSF, JAX-RS, JSP / Servlet usw.) wiederverwendet werden kann.
2. Ziel nicht erreichbar, 'Entität' hat null zurückgegeben
Dies läuft darauf hinaus, dass die verschachtelte Eigenschaft
entity
wie#{bean.entity.property}
zurückgegeben zurückgegeben wirdnull
. Dies wird normalerweise nur angezeigt, wenn JSF den Wert für über eine Eingabekomponente wie unten festlegen mussproperty
, während die#{bean.entity}
tatsächlich zurückgegeben wirdnull
.Sie müssen sicherstellen, dass Sie die Modellentität zuvor in einer
@PostConstruct
oder<f:viewAction>
-Methode oder eineradd()
Aktionsmethode vorbereitet haben , falls Sie mit CRUD-Listen und / oder -Dialogen in derselben Ansicht arbeiten.In Bezug auf die Bedeutung von
@PostConstruct
; Dies in einem regulären Konstruktor zu tun, würde fehlschlagen, wenn Sie ein Bean-Management-Framework verwenden, das Proxys wie CDI verwendet. Verwenden Sie@PostConstruct
diese Option immer, um die Initialisierung einer verwalteten Bean-Instanz zu aktivieren (und um@PreDestroy
die Zerstörung einer verwalteten Bean-Instanz zu aktivieren). Außerdem hätten Sie in einem Konstruktor noch keinen Zugriff auf injizierte Abhängigkeiten. Siehe auch NullPointerException, wenn Sie versuchen, auf die @ Inject-Bean im Konstruktor zuzugreifen .Falls das
entityId
über geliefert wird<f:viewParam>
, müssten Sie<f:viewAction>
stattdessen verwenden@PostConstruct
. Siehe auch Wann wird f: viewAction / preRenderView im Vergleich zu PostConstruct verwendet?Sie müssen auch sicherstellen, dass Sie das
null
Nichtmodell bei Postbacks beibehalten, falls Sie es nur in eineradd()
Aktionsmethode erstellen . Am einfachsten wäre es, die Bohne in den Ansichtsbereich zu stellen. Siehe auch So wählen Sie den richtigen Bean-Bereich aus.3. Ziel nicht erreichbar, 'null' hat null zurückgegeben
Dies hat tatsächlich die gleiche Ursache wie # 2, nur die (ältere) verwendete EL-Implementierung ist etwas fehlerhaft, wenn es darum geht, den in der Ausnahmemeldung anzuzeigenden Eigenschaftsnamen beizubehalten, der letztendlich fälschlicherweise als 'null' angezeigt wird. Dies macht das Debuggen und Beheben nur dann etwas schwieriger, wenn Sie einige verschachtelte Eigenschaften wie diese haben
#{bean.entity.subentity.subsubentity.property}
.Die Lösung ist immer noch dieselbe: Stellen Sie sicher, dass die betreffende verschachtelte Entität nicht
null
auf allen Ebenen vorhanden ist.4. Ziel nicht erreichbar, '' 0 '' hat null zurückgegeben
Dies hat auch die gleiche Ursache wie # 2, nur die (ältere) verwendete EL-Implementierung ist fehlerhaft bei der Formulierung der Ausnahmemeldung. Dies wird nur angezeigt, wenn Sie
[]
in EL die Klammernotation verwenden,#{bean.collection[index]}
bei der das#{bean.collection}
selbst nicht null ist, das Element am angegebenen Index jedoch nicht vorhanden ist. Eine solche Nachricht muss dann interpretiert werden als:Die Lösung ist auch die gleiche wie bei Nummer 2: Stellen Sie sicher, dass das Sammlungsobjekt verfügbar ist.
5. Ziel nicht erreichbar, 'BracketSuffix' hat null zurückgegeben
Dies hat tatsächlich die gleiche Ursache wie # 4, nur die verwendete (ältere) EL-Implementierung ist etwas fehlerhaft, wenn es darum geht, den in der Ausnahmemeldung anzuzeigenden Iterationsindex beizubehalten, der letztendlich fälschlicherweise als 'BracketSuffix' angezeigt wird, was eigentlich das Zeichen ist
]
. Dies erschwert das Debuggen und Beheben nur, wenn Sie mehrere Elemente in der Sammlung haben.Andere mögliche Ursachen für
javax.el.PropertyNotFoundException
:quelle
#{bean.entity.property}
Gibt den Wert aus,<p:selectBooleanCheckbox value="#{bean.entity.property}"/>
schlägt aber fehl. Mein Boolescher Wert hat einen Setter. Eine Integer-Eigenschaft für dieselbe Entität funktioniert , wenn sie in einem Eingabefeld verwendet wird. Irgendwelche Ideen?Target Unreachable, identifier 'bean' resolved to null
:: Stellen Sie in Maven-Projekten mit mehreren Modulen (die Module für ejb, web, ear enthalten) sicher, dass Ihr Webmodul eine Abhängigkeit von Ihrem ejb-Modul deklariert. Ohne das@ManagedBean
kann das nicht mit JSF2.0 gelöst werden und man muss sie in deklarierenfaces-config.xml
. Ich brauchte ungefähr zwei Stunden, um zu bemerken, dass ich keine Abhängigkeit deklariert hatte, um das EJB in mein Web-Modul aufzunehmen (hatte nur EJB und Web in meinem Ohr)@ManagedBean
Klassen gehören nicht in erster Linie zur Service-Schicht (EJB-Projekt). Siehe auch stackoverflow.com/questions/13011392/jsf-service-layerFür diejenigen, die noch stecken ...
Bei Verwendung von NetBeans 8.1 und GlassFish 4.1 mit CDI hatte ich dieses Problem aus irgendeinem Grund nur lokal, nicht auf dem Remote-Server. Was hat der Trick gemacht:
-> Verwenden von Javaee-Web-API 7.0 anstelle der von NetBeans bereitgestellten Standard-POM-Version JavaE-Web-API 6.0.
-> Laden Sie diese javaee-web-api-7.0.jar als lib auf den Server hoch (lib-Ordner im Ordner domain1) und starten Sie den Server neu.
quelle
Ich beschloss, meine Erkenntnisse zu diesem Fehler zu teilen, nachdem ich ihn selbst behoben hatte.
Zunächst sollten BalusC-Lösungen ernst genommen werden, aber dann gibt es ein weiteres wahrscheinliches Problem in Netbeans, das Sie berücksichtigen sollten, insbesondere beim Erstellen eines Enterprise Application Project (EAR). mit Maven.
Netbeans generiert eine übergeordnete POM-Datei , ein EAR-Projekt , ein EJB-Projekt und ein WAR-Projekt . Alles andere in meinem Projekt war in Ordnung und ich nahm fast an, dass das Problem ein Fehler in wahrscheinlich GlassFish 4.0 ist (ich musste es installieren und in Netbeans einstecken), da GlassFish 4.1 einen Weld CDI-Fehler hat, der das eingebettete GlassFish 4.1 in Netbeans 8.0 macht. 2 unbrauchbar außer durch einen Patch.
Lösung:
Um den Fehler "Ziel nicht erreichbar, Bezeichner 'Bean' auf Null aufgelöst" zu beheben,
I Klicken Sie mit der rechten Maustaste auf das übergeordnete POM-Projekt und wählen Sie Eigenschaften . Ein Dialogfeld mit den Projekteigenschaften wird angezeigt. Klicken Sie auf "Quellen". Sie werden überrascht sein, dass " Quell- / Binärformat " auf 1,5 und " Codierung " auf Windows 1250 eingestellt sind. Ändern Sie das " Quell- / Binärformat" auf 1,6 bis 1,7 Sie bevorzugen es, Ihr Projekt CDI-kompatibel zu machen und UTF-8 zu " kodieren ".
Machen Sie dasselbe für alle anderen Teilprojekte (EAR, EJB, WAR), wenn sie noch nicht teilbar sind. Führen Sie Ihr Projekt aus, und dieser Fehler wird nicht erneut angezeigt.
Ich hoffe, das hilft jemandem da draußen, der einen ähnlichen Fehler hat.
quelle
Ich habe beschlossen, meine Lösung zu teilen, denn obwohl viele der hier gegebenen Antworten hilfreich waren, hatte ich immer noch dieses Problem. In meinem Fall verwende ich JSF 2.3, jdk10, jee8, cdi 2.0 für mein neues Projekt und habe meine App auf Wildfly 12 ausgeführt und den Server mit dem Parameter standalone.sh -Dee8.preview.mode = true gestartet, wie auf der Wildfly-Website empfohlen . Das Problem mit "Bean auf Null gelöst" verschwand nach dem Herunterladen von Wildfly 13. Durch das Hochladen des gleichen Krieges auf Wildfly 13 funktionierte alles.
quelle
Ich bin bei diesem Fehler hängen geblieben, weil ich in der Klasse, in der
@SpringBootApplication
ich vergessen habe, den Paketnamen des Controllers anzugeben.Diesmal wollte ich genauer darauf hinweisen, welche Komponenten Spring scannen musste, anstatt das Basispaket zu konfigurieren.
Es war so:
@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service"})
Aber die richtige Form ist eine davon:
@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service", "br.com.company.project.controller"})
@ComponentScan(basePackages = {"br.com.company.project")
Ich habe beschlossen, meine Lösung zu teilen, denn obwohl die richtige Antwort sehr umfassend ist, deckt sie diesen (idiotischen) Fehler nicht ab :)
quelle
In meinem Fall habe ich in @Named ("beanName") einen Rechtschreibfehler begangen. Es wurde angenommen, dass es sich um "beanName" handelt, aber ich habe beispielsweise "beanNam" geschrieben.
quelle
Ich benutze Wildfly 10 für Javaee Container. Ich hatte das Problem "Ziel nicht erreichbar, 'Entität' hat null zurückgegeben" festgestellt. Vielen Dank für Vorschläge von BalusC, aber das mein Problem aus den Lösungen erklärt. Versehentlich mit "import com.sun.istack.logging.Logger;" anstelle von "import org.jboss.logging.Logger;" verursacht CDI implementiert JSF EL. Hoffe, es hilft, die Lösung zu verbessern.
quelle
Ich hatte das gleiche Problem. Die Lösung erwies sich als viel einfacher. Es scheint, dass eine Datentabelle die Methode in Form eines Getters haben möchte, dh getSomeMethod (), nicht nur someMethod (). In meinem Fall in der Datentabelle habe ich findResults aufgerufen. Ich habe die Methode in meiner Backing Bean in getFindResults () geändert und es hat funktioniert.
Ein commandButton funktionierte find ohne das get, was es nur noch verwirrender machte.
quelle
Was # 2 betrifft, so wurde es in meinem Fall nach dem Ersetzen auf magische Weise zum Leben erweckt
Tag mit
Nachdem ich mehrere (um ehrlich zu sein, einfachere) JSF-Projekte durchgeführt hatte, konnte ich mich nicht erinnern, jetzt etwas anderes eingerichtet zu haben, und ich bekam diese Art von Fehler zum ersten Mal. Ich habe eine sehr einfache Anmeldeseite erstellt (Benutzername, Passwort, Benutzer Bean ...) und alles wie gewohnt eingerichtet. Der einzige Unterschied, den ich entdeckt habe, sind die oben genannten Tags. Vielleicht findet das jemand nützlich.
quelle
Das Problem in meinem Fall war, dass ich einen Konstruktor mit Parametern, aber keinen leeren Konstruktor in die Inject-Annotation aufgenommen habe.
Ich habe es gerade ohne Konstruktor getestet und dies scheint auch zu funktionieren.
quelle
Für 1. Thema ( Ziel nicht erreichbar, Bezeichner 'Bean' in Null aufgelöst );
Ich habe die wertvollen Antworten des @BalusC und der anderen Sharer überprüft, aber ich übertreffe dieses Problem in meinem Szenario wie folgt. Nach dem Erstellen eines neuen xhtml mit einem anderen Namen und dem Erstellen einer Bean-Klasse mit einem anderen Namen habe ich die Codes Schritt für Schritt in die neue Bean-Klasse und die neue xhtml-Datei geschrieben (nicht kopiert und eingefügt).
quelle
Wenn ich den Kontextparameter AnnotationConfigWebApplicationContext aus der Datei web.xml entferne, ist dies Arbeit
Wenn Sie wie param haben, was wie unten gezeigt, müssen Sie es aus der Datei web.xml entfernen
quelle
Arbeiten mit JSF im alten Stil Sie müssen die verwaltete Bean in der Datei bean -config.xml (im Ordner WEB-INF) definieren und in der Datei web.xml auf folgende Weise darauf verweisen :
beans-config.xml
(Ich habe versucht, andere Bereiche zu verwenden, aber ...)
web.xml
quelle
Ein weiterer Hinweis: Ich habe JSF verwendet und mvn-Abhängigkeiten hinzugefügt: com.sun.faces jsf-api 2.2.11
Dann habe ich versucht, zu Primefaces zu wechseln und die Primefaces-Abhängigkeit hinzuzufügen:
Ich habe mein xhtml von h: in p: geändert und xmlns: p = "http://primefaces.org/ui zur Vorlage hinzugefügt. Nur mit JSF lief das Projekt in Ordnung und die verwaltete Bean wurde in Ordnung erreicht. Wenn ich Primefaces hinzufüge Ich bekam das nicht erreichbare Objekt (javax.el.propertynotfoundexception). Das Problem war, dass JSF die ManagedBean generierte, nicht Primefaces, und ich fragte Primefaces nach dem Objekt. Ich musste jsf-impl aus meinem .pom löschen, clean und Installieren Sie das Projekt. Von diesem Punkt an ging alles in Ordnung. Ich hoffe, das hilft.
quelle
EL interpretiert $ {bean.propretyName} wie beschrieben - der propertyName wird zu getPropertyName () unter der Annahme, dass Sie explizite oder implizite Methoden zum Generieren von Getter / Setter verwenden
Sie können dieses Verhalten überschreiben, indem Sie den Namen explizit als Funktion identifizieren: $ {bean.methodName ()} Dies ruft die Funktionsmethode Name () direkt ohne Änderung auf.
Es ist nicht immer wahr, dass Ihre Accessoren "get ..." heißen.
quelle
action="#{bean.property}"
stattaction="#{bean.method}"
.In meinem Fall fehlte "el-ri-1.0.jar".
quelle