Identifizieren und Lösen von javax.el.PropertyNotFoundException: Ziel nicht erreichbar

Wenn versucht wird, auf eine verwaltete Bean in EL wie #{bean.entity.property} , wird manchmal eine Ausnahme javax.el.PropertyNotFoundException: Target Unreachable ausgetriggers, normalerweise wenn eine Bean-Eigenschaft oder eine Bean-Aktion gesetzt werden soll ist aufzurufen.

Es scheint fünf verschiedene Arten von Nachrichten zu geben:

  1. Ziel nicht erreichbar, Bezeichner ‘Bean’ wurde auf null aufgetriggers
  2. Ziel nicht erreichbar, “Entität” hat null zurückgegeben
  3. Ziel Nicht erreichbar, ‘null’ hat null zurückgegeben
  4. Ziel nicht erreichbar, ” 0 ” hat null zurückgegeben
  5. Ziel nicht erreichbar, “BracketSuffix” hat null zurückgegeben

Was bedeuten sie alle? Wie werden sie verursacht und wie sollen sie getriggers werden?

    1. Ziel nicht erreichbar, Bezeichner ‘Bean’ wurde auf Null aufgetriggers

    Dies läuft darauf hinaus, dass die verwaltete Bean-Instanz selbst nicht genau nach dieser Kennung (Name der verwalteten Bean) in EL wie #{bean} .

    Die Identifizierung der Ursache kann in drei Schritte unterteilt werden:

    ein. Wer bewirtschaftet die Bohne?
    b. Was ist der (Standard) Name der verwalteten Bean?
    c. Wo ist die Backing-Bean-class?

    1a. Wer bewirtschaftet die Bohne?

    Der erste Schritt wäre zu prüfen, welches Bean-Management-Framework für das Management der Bean-Instanz zuständig ist. Ist es JSF über @ManagedBean ? Oder ist es CDI via @Named ? Oder ist es Frühling über @Component ? Können Sie sicherstellen, dass Sie nicht mehrere Framework-spezifische Bean-Management-Anmerkungen für genau dieselbe Backing-Bean-class mischen? ZB @Named @Component oder @Named @ManagedBean oder @ManagedBean @Component . Das ist falsch. Die Bean muss von höchstens einem Bean-Management-Framework verwaltet werden und dieses Framework muss ordnungsgemäß konfiguriert sein. Wenn Sie noch keine Idee haben, welche Sie wählen sollten, gehen Sie zu Backing Beans (@ManagedBean) oder CDI Beans (@Named)? und Spring JSF-Integration: Wie injiziert man eine Spring-Komponente / Dienst in JSF Managed Bean?

    Falls JSF die Bean über @ManagedBean , müssen Sie Folgendes sicherstellen:

    • Die faces-config.xml ist mit JSF 2.0 kompatibel. Die XSD-Datei und die version müssen also mindestens JSF 2.0 oder höher und damit nicht 1.x angeben.

        

      Ersetzen 2_0 für JSF 2.1 einfach 2_0 und 2.0 durch 2_1 bzw. 2.1 .

      Wenn Sie JSF 2.2 oder höher verwenden, stellen Sie sicher, dass Sie anstelle von java.sun.com allen java.sun.com xmlns.jcp.org Namespaces verwenden.

        

      Bei JSF 2.3 ersetzen 2_2 einfach 2_2 und 2.2 durch 2_3 bzw. 2.3 .

    • Sie haben nicht versehentlich javax.annotation.ManagedBean anstelle von javax.faces.bean.ManagedBean . Achten Sie auf die automatische Vervollständigung der IDE, Eclipse ist dafür bekannt, die falsche als erstes Element in der Liste zu markieren.

    • Sie haben den @ManagedBean durch einen JSF 1.x-Stil Eintrag in faces-config.xml für dieselbe Backing-Bean-class und einen anderen Namen für verwaltete Bean außer Kraft @ManagedBean . Dieser hat Vorrang vor @ManagedBean . Die Registrierung einer verwalteten Bean in faces-config.xml ist seit JSF 2.0 nicht mehr notwendig, entfernen Sie sie einfach.
    • Ihr classnpfad zur Laufzeit ist sauber und frei von Duplikaten in JSF-API-bezogenen JARs. Stellen Sie sicher, dass Sie nicht mehrere JSF-Implementierungen (Mojarra und MyFaces) mischen. Stellen Sie sicher, dass Sie keine weitere JSF- oder Java EE-API-JAR-Datei zusammen mit webapp bereitstellen, wenn der Zielcontainer die JSF-API bereits außerhalb der Box bündelt. Siehe auch Abschnitt ” JSF installieren ” unserer JSF-Wiki-Seite für JSF-Installationsanweisungen. Wenn Sie beabsichtigen, Container-gebündelte JSF aus der WAR-Datei anstatt aus dem Container selbst zu aktualisieren, stellen Sie sicher, dass Sie den Zielcontainer angewiesen haben, die mit WAR gebündelte JSF-API / impl zu verwenden.
    • Wenn Sie JSF-verwaltete Beans in einer JAR- /META-INF/faces-config.xml , stellen Sie sicher, dass die JAR- /META-INF/faces-config.xml mindestens eine mit JSF 2.0 kompatible /META-INF/faces-config.xml . Siehe auch Referenzieren von JSF-verwalteten Beans, die in einer JAR-Datei bereitgestellt werden?
    • Wenn Sie Jura-JSF 1.x tatsächlich verwenden und kein Upgrade durchführen können, müssen Sie die Bean über in faces-config.xml anstelle von @ManagedBean . Vergessen Sie nicht, Ihren Projektbuild-Pfad so zu @ManagedBean dass Sie keine JSF 2.x-Bibliotheken mehr haben (so dass die @ManagedBean Annotation nicht verwirrend erfolgreich kompiliert werden würde).


    Falls CDI die Bohne über @Named , müssen Sie Folgendes sicherstellen:

    • CDI 1.0 (Java EE 6) benötigt eine /WEB-INF/beans.xml , um CDI in WAR zu aktivieren. Es kann leer sein oder nur folgenden Inhalt haben:

       < ?xml version="1.0" encoding="UTF-8"?>   
    • CDI 1.1 (Java EE 7) ohne beans.xml oder eine leere beans.xml Datei oder mit der obigen CDI 1.0-kompatiblen beans.xml verhält sich genauso wie CDI 1.0. Wenn eine CDI 1.1-kompatible beans.xml mit einer expliziten version="1.1" , werden @Named Beans standardmäßig nur mit einer expliziten CDI-Bereichsanmerkung wie @RequestScoped , @ViewScoped , @SessionScoped , @ApplicationScoped usw. @ApplicationScoped . /WEB-INF/beans.xml Sie beabsichtigen, alle Beans als CDI-verwaltete Beans zu registrieren, auch solche ohne einen expliziten CDI-Bereich, verwenden Sie die folgende CDI 1.1-kompatible /WEB-INF/beans.xml mit bean-discovery-mode="all" (der Standardwert ist bean-discovery-mode="annotated" ).

       < ?xml version="1.0" encoding="UTF-8"?>   
    • Stellen Sie bei Verwendung von CDI 1.1+ mit bean-discovery-mode="annotated" (Standard) sicher, dass Sie nicht versehentlich einen JSF-Bereich wie javax.faces.bean.RequestScoped anstelle eines CDI-Bereichs javax.enterprise.context.RequestScoped . Achten Sie auf die automatische Vervollständigung der IDE.

    • Wenn Sie Mojarra 2.3.0-2.3.2 und CDI 1.1+ mit bean-discovery-mode="annotated" (Standard) verwenden, müssen Sie Mojarra aufgrund eines Fehlers auf 2.3.3 oder neuer aktualisieren. Falls Sie kein Upgrade durchführen können, müssen Sie entweder bean-discovery-mode="all" in beans.xml oder die JSF 2.3-spezifische @FacesConfig Annotation auf eine beliebige class in der WAR setzen ( @FacesConfig eine Art von eine Anwendungsbereichs-Startup-class).
    • Nicht-Java-EE-Container wie Tomcat und Jetty werden nicht zusammen mit CDI ausgeliefert. Sie müssen es manuell installieren. Es ist ein bisschen mehr Arbeit als nur das Hinzufügen der Bibliothek JAR (s). Vergewissern Sie sich bei Tomcat, dass Sie die statementen in dieser Antwort befolgen: Wie installiert und verwendet CDI auf Tomcat?
    • Ihr Laufzeitklassenpfad ist sauber und frei von Duplikaten in CDI-API-bezogenen JARs. Stellen Sie sicher, dass Sie nicht mehrere CDI-Implementierungen mischen (Weld, OpenWebBeans usw.). Stellen Sie sicher, dass Sie keine weitere CDI- oder Java EE API-JAR-Datei zusammen mit webapp bereitstellen, wenn der Zielcontainer die CDI-API bereits außerhalb der Box bündelt.
    • Wenn Sie CDI-verwaltete Beans für JSF-Ansichten in einer JAR- /META-INF/beans.xml , stellen Sie sicher, dass die JAR- /META-INF/beans.xml mindestens eine gültige /META-INF/beans.xml (die leer /META-INF/beans.xml kann).


    Falls Spring die Bohne über @Component , müssen Sie Folgendes sicherstellen:

    • Spring wird gemäß seiner Dokumentation installiert und integriert. Wichtig ist, dass Sie diese web.xml mindestens in web.xml :

        org.springframework.web.context.ContextLoaderListener  

      Und das in faces-config.xml :

        org.springframework.web.jsf.el.SpringBeanFacesELResolver  
    • (oben ist alles, was ich in Bezug auf Spring weiß – Spring mache ich nicht – fühlen Sie sich frei, andere wahrscheinliche Springsbedingte Ursachen zu bearbeiten / zu kommentieren; zB einige Probleme mit der XML-Konfiguration)


    Falls es eine Repeaterkomponente ist , die die (verschachtelte) Bean über ihr var Attribut verwaltet (zB , , , etc) und Sie haben tatsächlich ein “Target Unreachable, identifier ‘item’ getriggers auf null”, dann müssen Sie Folgendes sicherstellen:

    • Auf das #{item} wird im binding untergeordneten Komponente nicht verwiesen. Dies ist falsch, da das binding während der Erstellung der Ansicht und nicht während der Renderzeit der Ansicht ausgeführt wird. Außerdem gibt es physikalisch nur eine Komponente im Komponentenbaum, die einfach während jeder Iterationsrunde wiederverwendet wird. Mit anderen Worten, Sie sollten binding="#{bean.component}" anstelle von binding="#{item.component}" . Aber viel besser ist es, die Komponente Binin vollständig zu entfernen und den richtigen Ansatz für das Problem zu finden, das Sie auf diese Weise lösen wollten. Siehe auch Wie funktioniert das Attribut ‘binding’ in JSF? Wann und wie sollte es verwendet werden?


    1b. Was ist der (Standard) Name der verwalteten Bean?

    Der zweite Schritt würde den Namen des registrierten verwalteten Beans überprüfen. JSF- und Spring-Benutzungskonventionen entsprechen der JavaBeans-Spezifikation, während CDI Ausnahmen abhängig von CDI-Impl / Version hat.

    • Eine FooBean Backing Bean class wie unten,

       @Named public class FooBean {} 

      In allen Bean-Management-Frameworks wird der Name der standardmäßigen verwalteten Bean #{fooBean} JavaBeans-Spezifikation verwendet.

    • Eine FOOBean Backing Bean-class wie unten,

       @Named public class FOOBean {} 

      Wessen unqualifizierter classnname mit mindestens zwei Großbuchstaben beginnt, wird in JSF und Spring einen standardmäßigen Namen für verwaltete Bean haben, genau den unqualifizierten classnnamen #{FOOBean} , auch #{FOOBean} JavaBeans-Spezifikation. In CDI ist dies auch in Weld-Versionen der Fall, die vor Juni 2015 veröffentlicht wurden, aber nicht in Weld-Versionen, die nach Juni 2015 (2.2.14 / 2.3.0.B1 / 3.0.0.A9) veröffentlicht wurden, noch in OpenWebBeans aufgrund eines Versehens in CDI-Spezifikation In diesen Weld-Versionen und in allen OWB-Versionen ist es nur mit dem ersten Zeichen in Kleinbuchstaben #{fOOBean} .

    • Wenn Sie einen verwalteten Bean-Namen wie unten angegeben haben,

       @Named("foo") public class FooBean {} 

      oder äquivalent mit @ManagedBean(name="foo") oder @Component("foo") , dann wird es nur von #{foo} und somit nicht von #{fooBean} .


    1c. Wo ist die Backing-Bean-class?

    Der dritte Schritt wäre das Doublechecking, wenn die Backing-Bean-class an der richtigen Stelle in der erstellten und bereitgestellten WAR-Datei ist. Stellen Sie sicher, dass Sie eine vollständige Säuberung, Neuerstellung, erneute Bereitstellung und Neustart des Projekts und des Servers ordnungsgemäß durchgeführt haben, falls Sie gerade damit beschäftigt waren, Code zu schreiben und im Browser ungeduldig F5 zu drücken. Wenn noch vergeblich, 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-class muss sich in ihrer Paketstruktur in /WEB-INF/classes . Oder wenn es als Teil eines JAR-Moduls .class ist, muss die JAR, die die kompilierte .class Datei enthält, in /WEB-INF/lib und somit nicht zB EAR’s /lib oder anderswo liegen.

    Wenn Sie Eclipse verwenden, stellen Sie sicher, dass die Backing-Bean-class in src und daher nicht WebContent , und stellen Sie sicher, dass Projekt> Automatisch erstellen aktiviert ist. Wenn Sie Maven verwenden, stellen Sie sicher, dass die Backing-Bean-class in src/main/java und damit nicht in src/main/resources oder src/main/webapp .

    Wenn Sie die Webanwendung als Teil einer EAR mit EJB + WAR (s) packen, müssen Sie sicherstellen, dass die Backing-Bean-classn im WAR-Modul und somit weder im EAR-Modul noch im EJB-Modul enthalten sind. Die Business Tier (EJB) muss frei von jeglichen Web Tier (WAR) -bezogenen Artefakten sein, so dass die Business Tier über mehrere Web-Tiers wiederverwendbar ist (JSF, JAX-RS, JSP / Servlet, usw.).


    2. Ziel nicht erreichbar, ‘Entität’ hat null zurückgegeben

    Dies führt dazu, dass die geschachtelte Eigenschaft entity wie in #{bean.entity.property} null . Dies ist normalerweise nur verfügbar, wenn JSF den Wert für die property über eine Eingabekomponente wie unten #{bean.entity} , während #{bean.entity} tatsächlich null .

      

    Sie müssen sicherstellen, dass Sie die Modelleinheit zuvor in einer @PostConstruct oder -Methode vorbereitet haben, oder vielleicht eine add() Aktionsmethode, falls Sie mit CRUD-Listen und / oder -Dialogfeldern in derselben Ansicht arbeiten .

     @Named @ViewScoped public class Bean { private Entity entity; // +getter (setter is not necessary). @Inject private EntityService entityService; @PostConstruct public void init() { // In case you're updating an existing entity. entity = entityService.getById(entityId); // Or in case you want to create a new entity. entity = new Entity(); } // ... } 

    In @PostConstruct auf die Bedeutung von @PostConstruct ; Dies würde in einem regulären Konstruktor fehlschlagen, falls Sie ein Bean-Management-Framework verwenden, das Proxies wie CDI verwendet. Verwenden @PostConstruct immer @PostConstruct , um die Initialisierung der verwalteten Bean-Instanz @PreDestroy (und verwenden Sie @PreDestroy um sich an der Zerstörung der verwalteten Bean-Instanz zu beteiligen). Außerdem hätten Sie in einem Konstruktor noch keinen Zugriff auf alle injizierten Abhängigkeiten, siehe auch NullPointerException beim Versuch, auf @Inject-Bean im Konstruktor zuzugreifen .

    Falls die entityId über , müssen Sie anstelle von @PostConstruct . Siehe auch Wann sollte f: viewAction / preRenderView oder PostConstruct verwendet werden?

    Sie müssen außerdem sicherstellen, dass Sie das Nicht- null Modell während Postbacks beibehalten, falls Sie es nur in einer add() Aktionsmethode erstellen. Am einfachsten wäre es, die Bean in den Ansichtsbereich zu legen. Siehe auch Wie wählt man den richtigen Bean Scope?


    3. Ziel nicht erreichbar, ‘null’ hat null zurückgegeben

    Dies hat eigentlich die gleiche Ursache wie # 2, nur die verwendete (ältere) EL-Implementierung ist etwas errorshaft beim Beibehalten des Eigenschaftsnamens, der in der Ausnahmebedingungsnachricht angezeigt wird, die schließlich fälschlicherweise als ‘Null’ angezeigt wurde. Dies macht das Debuggen und Fixieren nur ein bisschen schwieriger, wenn Sie einige verschachtelte Eigenschaften wie #{bean.entity.subentity.subsubentity.property} .

    Die Lösung ist immer noch dieselbe: Stellen Sie sicher, dass die betreffende verschachtelte Entität in allen Ebenen nicht null ist.


    4. Ziel nicht erreichbar, ” 0 ” hat null zurückgegeben

    Dies hat auch die gleiche Ursache wie # 2, nur die verwendete (ältere) EL-Implementierung ist errorshaft bei der Formulierung der Ausnahmebedingungsnachricht. Dies macht nur #{bean.collection[index]} wenn Sie die #{bean.collection[index]} Klammer [] in EL wie in #{bean.collection[index]} wobei #{bean.collection} selbst nicht null ist, das Element am angegebenen Index jedoch nicht existiert. Eine solche Nachricht muss dann interpretiert werden als:

    Ziel nicht erreichbar, ‘sammlung [0]’ hat null zurückgegeben

    Die Lösung ist auch die gleiche wie # 2: Stellen Sie sicher, dass das Sammelelement verfügbar ist.


    5. Ziel nicht erreichbar, ‘BracketSuffix’ hat null zurückgegeben

    Dies hat eigentlich die gleiche Ursache wie # 4, nur die (ältere) EL-Implementierung ist etwas errorshaft beim Beibehalten des Iterationsindex, der in der Ausnahmebedingungsnachricht angezeigt wird, die schließlich fälschlicherweise als ‘BracketSuffix’ angezeigt wird, was wirklich das Zeichen ist ] . Dies macht das Debuggen und Fixieren nur ein wenig schwieriger, wenn Sie mehrere Objekte in der Sammlung haben.


    Andere mögliche Ursachen von javax.el.PropertyNotFoundException :

    • javax.el.ELException: Fehler beim Lesen von ‘foo’ am Typ com.example.Bean
    • javax.el.ELException: Die Eigenschaft actionMethod konnte in der class com.example.Bean nicht gefunden werden
    • javax.el.PropertyNotFoundException: Die Eigenschaft ‘foo’ wurde beim Typ com.example.Bean nicht gefunden
    • javax.el.PropertyNotFoundException: Property ‘foo’ ist beim Typ java.lang.Boolean nicht lesbar
    • javax.el.PropertyNotFoundException: Die Eigenschaft wurde nicht im Typ org.hibernate.collection.internal.PersistentSet gefunden
    • Outcommented Facelets Code ruft immer noch EL-Ausdrücke wie # {bean.action ()} auf und verursacht javax.el.PropertyNotFoundException auf # {bean.action}

    Für diejenigen, die immer noch feststecken …

    Mit NetBeans 8.1 und GlassFish 4.1 mit CDI, aus irgendeinem Grund hatte ich dieses Problem nur lokal, nicht auf dem Remote-Server. Was hat der Trick:

    -> Verwenden von javaee-web-api 7.0 anstelle der Standard-Pom-Version von NetBeans, die javaee-web-api 6.0 ist, also:

      javax javaee-web-api 7.0 provided jar  

    -> laden Sie diese javaee-web-api-7.0.jar als lib to auf den Server (lib-Ordner im Ordner domain1) und starten Sie den Server neu.

    Ich beschloss, mein Ergebnis zu diesem Fehler nach der eigenen Lösung zu teilen.

    Zuallererst sollten BalusC-Lösungen ernst genommen werden, aber dann gibt es ein weiteres wahrscheinliches Problem, auf das Netbeans insbesondere beim Erstellen eines Enterprise Application Project (EAR) mit Maven achten sollte.

    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 GlassFish 4.0 ist (ich musste es installieren und in Netbeans stecken), weil GlassFish 4.1 einen Weld CDI Bug hat, der das eingebettete GlassFish 4.1 in Netbeans 8.0 macht. 2 unbrauchbar außer durch einen Patch.

    Lösung:

    Zum Auflösen des Ziels “Ziel nicht erreichbar, Bezeichner des Bezeichners wurde auf null aufgetriggers”

    I Klicken Sie mit der rechten Maustaste auf das übergeordnete POM-Projekt und wählen Sie Eigenschaften . Ein Projekt Eigenschaften Dialog erscheint, klicken Sie auf “Quellen”, Sie werden überrascht sein zu sehen, die ” Source / Binary Format ” auf 1,5 und ” Encoding ” auf Windows 1250 gesetzt. Ändern Sie die ” Source / Binary Format ” auf 1.6 oder 1.7, je nachdem Sie bevorzugen es, Ihr Projekt CDI-konform zu machen, und ” Encoding ” zu UTF-8.

    Machen Sie das gleiche für alle anderen Teilprojekte (EAR, EJB, WAR), wenn sie nicht bereits abteilbar sind. Führen Sie Ihr Projekt aus, und Sie werden diesen Fehler nicht erneut erhalten.

    Ich hoffe, das hilft jemandem da draußen, der einen ähnlichen Fehler hat.

    In meinem Fall habe ich einen Fehler in @Named (“beanName”) begangen, es sollte “beanName” sein, aber ich habe zum Beispiel “beanNam” geschrieben.

    Ich benutze Wildfly 10 für Java-Container. Ich hatte “Ziel nicht erreichbar” -Entität “Null zurückgegeben” Problem festgestellt. Danke für Anregungen 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. Ich hoffe, es hilft, die Lösung zu verbessern.

    Ich hatte das gleiche Problem. Die Lösung erwies sich als viel einfacher. Es scheint, dass eine Datentabelle die Methode in Form eines Getters, dh getSomeMethod (), und nicht nur someMethod (), haben möchte. In meinem Fall habe ich in der Datatable findResults aufgerufen. Ich habe die Methode in meiner Backing-Bean getFindResults () geändert und es hat funktioniert.

    Ein commandButton funktionierte ohne den get find, der dazu diente, es nur noch verwirrender zu machen.

    Ich entschied mich, meine Lösung zu teilen, denn obwohl viele Antworten hier hilfreich waren, hatte ich immer noch dieses Problem. In meinem Fall benutze ich JSF 2.3, jdk10, jee8, cdi 2.0 für mein neues Projekt und ich habe meine App auf wildfly 12 gestartet und den Server mit dem Parameter standalone.sh -Dee8.preview.mode = true gestartet, wie auf der wildfly-Website empfohlen . Das Problem mit “bean resolved to null” verschwand nach dem Download von wildfly 13. Das Hochladen von genau demselben Krieg auf wildfly 13 hat alles funktioniert.

    Mit JSF im alten Stil arbeiten Sie müssen die verwaltete Bean in der Datei beans-config.xml (im Ordner WEB-INF) definieren und in der Datei web.xml einen Verweis darauf anlegen :

    bohnen-config.xml

      "the name by wich your backing bean will be referenced" "your backing bean fully qualified class name" session  

    (Ich habe versucht, andere Bereiche zu verwenden, aber …)

    web.xml

      javax.faces.CONFIG_FILES "/WEB-INF/beans-config.xml  

    Ein weiterer Hinweis: Ich habe JSF verwendet und mvn Abhängigkeiten hinzugefügt: com.sun.faces jsf-api 2.2.11

       com.sun.faces jsf-impl 2.2.11  

    Dann habe ich versucht, zu Primefaces zu wechseln und die Abhängigkeit von den Oberflächen hinzuzufügen:

      org.primefaces primefaces 6.0  

    Ich änderte mein Xhtml von h: zu p :, indem ich xmlns: p = “http://primefaces.org/ui zu der Schablone hinzufügte. Nur mit JSF lief das Projekt in Ordnung, und das managedbean wurde ok erreicht. Wenn ich Primefaces addiere Ich bekam das unerreichbare Objekt (javax.el.propertynotfundexception). Das Problem war, dass JSF die ManagedBean erzeugte, nicht Primefaces, und ich fragte Primefaces nach dem Objekt. Ich musste jsf-impl aus meinem .pom, clean und installiere das Projekt, alles ging von diesem Punkt an in Ordnung.

    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 function angeben: $ {bean.methodName ()} Dadurch wird die functionsmethode Name () direkt ohne Änderung aufgerufen.

    Es ist nicht immer wahr, dass Ihre Accessoren “get …” genannt werden.