Podczas próby odwołania się do zarządzanego komponentu bean w EL, w ten sposób #{bean.entity.property}
, czasami jest javax.el.PropertyNotFoundException: Target Unreachable
generowany wyjątek, zwykle gdy ma zostać ustawiona właściwość fasoli lub gdy ma zostać wywołana akcja komponentu bean.
Wydaje się, że istnieje pięć różnych rodzajów wiadomości:
- Cel nieosiągalny, identyfikator „ziarno” został rozwiązany na zero
- Cel nieosiągalny, „jednostka” zwróciła wartość null
- Cel nieosiągalny, wartość „null” zwróciła wartość null
- Cel nieosiągalny, wartość „0” zwróciła wartość null
- Element docelowy nieosiągalny, wartość „BracketSuffix” zwróciła wartość null
Co oni wszyscy znaczą? W jaki sposób są one spowodowane i jak należy je rozwiązać?
Class [ Lorg/mxchange/jfinancials/model/receipt/FinancialAdminReceiptSessionBeanRemote; ] not found. Error while loading [ cl ass org.mxchange.jfinancials.beans.financial.model.receipt.FinancialAdminReceiptWebRequestBean ]]]
i na pewnoFinancialAdminReceiptWebRequestBean
nie można było znaleźć i rozwiązać wspomnianej funkcji bean ( )null
. Innym częstym błędem jest nie restartowanie serwera aplikacji po np. Zmianie nazwy lub przeniesieniu klas / interfejsów (lub zapomnieniuclean
).Odpowiedzi:
1. Cel nieosiągalny, identyfikator „ziarno” rozwiązany na zero
Sprowadza się to do tego, że sama instancja zarządzanego komponentu bean nie mogła zostać znaleziona na podstawie dokładnie tego identyfikatora (nazwy zarządzanego komponentu bean) w EL
#{bean}
.Identyfikację przyczyny można podzielić na trzy etapy:
za. Kto zarządza fasolą?
b. Jaka jest (domyślna) nazwa zarządzanego komponentu bean?
do. Gdzie jest klasa fasoli?
1a. Kto zarządza fasolą?
Pierwszym krokiem byłoby sprawdzenie, które ramy zarządzania fasolą są odpowiedzialne za zarządzanie instancją fasoli. Czy to JSF przez
@ManagedBean
? Czy jest to CDI przez@Named
? A może to wiosna przez@Component
? Czy możesz upewnić się, że nie mieszasz wielu adnotacji specyficznych dla platformy zarządzania bean w tej samej klasie fasoli zapasowej? Np.@Named @Component
Lub@Named @ManagedBean
lub@ManagedBean @Component
. To jest źle. Fasola musi być zarządzana przez co najwyżej jedną strukturę zarządzania fasolą i ta struktura musi być odpowiednio skonfigurowana. Jeśli nie masz już pojęcia, który wybrać, przejdź do Backing beans (@ManagedBean) lub CDI Beans (@Named)? i integracja Spring JSF: jak wprowadzić komponent / usługę Spring do komponentu bean zarządzanego przez JSF?W przypadku, gdy jest to JSF, który zarządza fasolą za pośrednictwem
@ManagedBean
, musisz upewnić się, że:faces-config.xml
Deklaracja korzeń jest kompatybilny z JSF 2.0. Zatem plik XSD i plikversion
muszą przynajmniej określać JSF 2.0 lub nowszy, a więc nie 1.x.Dla JSF 2.1, wystarczy wymienić
2_0
i2.0
przez2_1
i2.1
odpowiednio.Jeśli korzystasz z JSF 2.2 lub nowszego, upewnij się, że używasz
xmlns.jcp.org
przestrzeni nazw zamiastjava.sun.com
wszystkich miejsc.Dla JSF 2.3, wystarczy wymienić
2_2
i2.2
przez2_3
i2.3
odpowiednio.Nie zaimportowałeś przypadkowo
javax.annotation.ManagedBean
zamiastjavax.faces.bean.ManagedBean
. Uważaj na autouzupełnianie IDE, wiadomo, że Eclipse automatycznie sugeruje niewłaściwy element jako pierwszy element na liście.@ManagedBean
stylu JSF 1.xw tej samej klasie zapasowego komponentu bean wraz z inną nazwą zarządzanego komponentu bean. Ten będzie miał pierwszeństwo przed . Rejestracja zarządzanego komponentu bean nie jest konieczna od czasu JSF 2.0, wystarczy ją usunąć.<managed-bean>
faces-config.xml
@ManagedBean
faces-config.xml
/META-INF/faces-config.xml
. Zobacz także Jak odwoływać się do komponentów bean zarządzanych przez JSF, które są dostarczane w pliku JAR?Jeśli faktycznie używając jurajskiego JSF 1.x, i nie można uaktualnić, potem musisz się zarejestrować poprzez fasoli
<managed-bean>
wfaces-config.xml
zamiast@ManagedBean
. Nie zapomnij o poprawieniu ścieżki budowania projektu jako takiej, że nie masz już bibliotek JSF 2.x (aby@ManagedBean
adnotacja nie była myląco pomyślna).W przypadku, gdy to CDI zarządza fasolą przez
@Named
, musisz upewnić się, że:CDI 1.0 (Java EE 6) wymaga
/WEB-INF/beans.xml
pliku, aby włączyć CDI w WAR. Może być pusty lub zawierać tylko następującą zawartość:CDI 1.1 (Java EE 7) bez żadnego
beans.xml
lub pustegobeans.xml
pliku lub z powyższym kompatybilnym z CDI 1.0beans.xml
będzie zachowywać się tak samo jak CDI 1.0. Kiedy pojawia się CDI 1.1 zgodnybeans.xml
z wyraźneversion="1.1"
, to będzie domyślnie zarejestrować tylko@Named
fasolę z wyraźnym CDI zakres adnotacji, takich jak@RequestScoped
,@ViewScoped
,@SessionScoped
,@ApplicationScoped
, itd. W przypadku, gdy zamierza zarejestrować wszystkie fasole jak CDI udało fasolę, nawet bez wyraźnego Zakres CDI, użyj poniższego CDI 1.1 kompatybilnego/WEB-INF/beans.xml
zbean-discovery-mode="all"
zestawem (domyślniebean-discovery-mode="annotated"
).Używając CDI 1.1+ z
bean-discovery-mode="annotated"
(domyślnie), upewnij się, że przypadkowo nie zaimportowałeś zakresu JSF, takiego jakjavax.faces.bean.RequestScoped
zamiast zakresu CDIjavax.enterprise.context.RequestScoped
. Uważaj na autouzupełnianie IDE.bean-discovery-mode="annotated"
(domyślnie), musisz zaktualizować Mojarra do wersji 2.3.3 lub nowszej z powodu błędu . W przypadku, gdy nie można uaktualnić, to trzeba albo do zestawubean-discovery-mode="all"
wbeans.xml
, lub umieścić JSF 2.3 specyficzną@FacesConfig
adnotację na dowolnej klasy w czasie wojny (ogólnie jakaś aplikacji scoped klasę startową).Jeśli pakujesz fasolę zarządzaną przez CDI dla widoków JSF w JAR, upewnij się, że JAR ma co najmniej ważny
/META-INF/beans.xml
(który można pozostawić pusty).Jeśli to Spring zarządza fasolą za pośrednictwem
@Component
, musisz upewnić się, że:Spring jest instalowany i integrowany zgodnie z dokumentacją . Co ważne, musisz to mieć przynajmniej w
web.xml
:A to w
faces-config.xml
:(powyżej jest wszystko, co wiem w odniesieniu do Springa - nie robię Spring - nie krępuj się edytować / komentować z innymi prawdopodobnymi przyczynami związanymi ze Springiem; np. niektóre problemy związane z konfiguracją XML)
W przypadku, gdy jest to komponent repeater kto zarządzania (zagnieżdżone) fasolkę za pośrednictwem
var
atrybutu (np<h:dataTable var="item">
,<ui:repeat var="item">
,<p:tabView var="item">
itp) i rzeczywiście dostał „docelowy jest nieosiągalny, identyfikator«pozycja»postanowił null”, to trzeba się upewnić, z następujących :Nie
#{item}
ma odniesienia dobinding
atrybutu żadnego komponentu podrzędnego. Jest to niepoprawne, ponieważbinding
atrybut działa w czasie tworzenia widoku, a nie podczas renderowania widoku. Co więcej, fizycznie jest tylko jeden komponent w drzewie komponentów, który jest po prostu ponownie używany podczas każdej rundy iteracji. Innymi słowy, powinieneś używaćbinding="#{bean.component}"
zamiastbinding="#{item.component}"
. Ale znacznie lepiej jest całkowicie pozbyć się wiązania komponentów do fasoli i zbadać / zapytać o właściwe podejście do problemu, który miałeś rozwiązać w ten sposób. Zobacz także Jak działa atrybut „binding” w JSF? Kiedy i jak należy go używać?1b. Jaka jest (domyślna) nazwa zarządzanego komponentu bean?
Drugim krokiem byłoby sprawdzenie nazwy zarejestrowanej zarządzanej fasoli. Konwencje użycia JSF i Spring są zgodne ze specyfikacją JavaBeans, podczas gdy CDI ma wyjątki w zależności od wersji / impl / wersji CDI.
FooBean
Klasy podłoże fasoli jak niżejbędzie we wszystkich strukturach zarządzania fasolami mieć domyślną nazwę zarządzanego komponentu bean
#{fooBean}
, zgodnie ze specyfikacją JavaBeans.FOOBean
Klasy podłoże fasoli jak niżejktórych niekwalifikowana nazwa klasy zaczyna się od co najmniej dwóch wielkich liter, będzie w JSF i Spring miała domyślną nazwę zarządzanego komponentu bean o dokładnie takiej samej nazwie jak niekwalifikowana klasa
#{FOOBean}
, a także będzie zgodna ze specyfikacją JavaBeans. W CDI dotyczy to również wersji Weld wydanych przed czerwcem 2015 r., Ale nie w wersjach Weld wydanych po czerwcu 2015 r. (2.2.14 / 2.3.0.B1 / 3.0.0.A9) ani w OpenWebBeans z powodu przeoczenia CDI spec . W tych wersjach Weld i we wszystkich wersjach OWB występuje tylko pierwsza mała litera#{fOOBean}
.Jeśli jawnie określisz nazwę zarządzanego ziarna,
foo
jak poniżej,lub równoważnie z
@ManagedBean(name="foo")
lub@Component("foo")
, będzie dostępna tylko przez,#{foo}
a więc nie przez#{fooBean}
.1c. Gdzie jest klasa fasoli?
Trzecim krokiem byłoby dwukrotne sprawdzenie, czy klasa zapasowego komponentu bean znajduje się we właściwym miejscu w zbudowanym i wdrożonym pliku WAR. Upewnij się, że poprawnie wykonałeś pełne czyszczenie, przebudowę, ponowne wdrożenie i ponowne uruchomienie projektu i serwera na wypadek, gdybyś był zajęty pisaniem kodu i niecierpliwym naciśnięciem klawisza F5 w przeglądarce. Jeśli nadal jest to na próżno, pozwól systemowi kompilacji utworzyć plik WAR, który następnie wyodrębnisz i sprawdzisz za pomocą narzędzia ZIP. Skompilowany
.class
plik klasy zapasowego komponentu bean musi znajdować się w swojej strukturze pakietu w/WEB-INF/classes
. Lub, gdy jest spakowany jako część modułu JAR, JAR zawierający skompilowany.class
plik musi znajdować się w,/WEB-INF/lib
a więc nie np. EAR/lib
lub gdzie indziej.Jeśli używasz Eclipse, upewnij się, że klasa zapasowego komponentu bean jest włączona,
src
a zatem nieWebContent
, i upewnij się, że włączona jest opcja Projekt> Buduj automatycznie . Jeśli używasz Mavena, upewnij się, że klasa fasoli bazowej jest włączona,src/main/java
a zatem nie znajduje się wsrc/main/resources
lubsrc/main/webapp
.Jeśli pakujesz aplikację internetową jako część EAR z EJB + WAR (y), musisz upewnić się, że klasy fasoli bazowej znajdują się w module WAR, a zatem nie w module EAR ani EJB. Warstwa biznesowa (EJB) musi być wolna od artefaktów związanych z warstwą WWW (WAR), tak aby warstwa biznesowa mogła być ponownie wykorzystywana na wielu różnych warstwach WWW (JSF, JAX-RS, JSP / Servlet itp.).
2. Cel nieosiągalny, „jednostka” zwróciła wartość null
Sprowadza się to do tego, że zagnieżdżona właściwość
entity
jest#{bean.entity.property}
zwracananull
. Zwykle ujawnia to tylko wtedy, gdy JSF musi ustawić wartość zaproperty
pośrednictwem komponentu wejściowego, takiego jak poniżej, podczas gdy#{bean.entity}
faktycznie zwracananull
.Musisz upewnić się, że jednostka modelu została wcześniej przygotowana w metodzie
@PostConstruct
lub<f:viewAction>
, a może wadd()
metodzie akcji w przypadku pracy z listami CRUD i / lub oknami dialogowymi w tym samym widoku.Jeśli chodzi o znaczenie
@PostConstruct
; zrobienie tego w zwykłym konstruktorze zakończy się niepowodzeniem w przypadku korzystania z platformy zarządzania bean, która używa serwerów proxy , takich jak CDI. Zawsze używaj@PostConstruct
do przechwytywania podczas inicjowania zarządzanego komponentu bean (i@PreDestroy
do przechwytywania podczas niszczenia zarządzanego komponentu bean). Ponadto w konstruktorze nie miałbyś jeszcze dostępu do żadnych wstrzykniętych zależności, zobacz także NullPointerException podczas próby uzyskania dostępu do komponentu bean @Inject w konstruktorze .W przypadku, gdy
entityId
jest dostarczany przez<f:viewParam>
, musisz użyć<f:viewAction>
zamiast@PostConstruct
. Zobacz także Kiedy używać f: viewAction / preRenderView a PostConstruct?Musisz również upewnić się, że zachowujesz
null
niemodel podczas ogłaszania zwrotnego, na wypadek gdyby tworzyłeś go tylko wadd()
metodzie akcji. Najłatwiej byłoby umieścić fasolę w polu widzenia. Zobacz też Jak wybrać odpowiednią lunetę do fasoli?3. Cel nieosiągalny, „null” zwrócił wartość null
Ma to faktycznie tę samą przyczynę, co # 2, tylko używana (starsza) implementacja EL jest nieco błędna w zachowaniu nazwy właściwości do wyświetlenia w komunikacie o wyjątku, który ostatecznie jest niepoprawnie ujawniony jako „null”. To tylko utrudnia debugowanie i naprawianie, gdy masz kilka zagnieżdżonych właściwości, takich jak ta
#{bean.entity.subentity.subsubentity.property}
.Rozwiązanie jest nadal takie samo: upewnij się, że dany element zagnieżdżony nie jest
null
na wszystkich poziomach.4. Cel nieosiągalny, „0” zwrócił wartość null
Ma to również tę samą przyczynę co # 2, tylko używana (starsza) implementacja EL jest błędna w formułowaniu komunikatu wyjątku. To uwidacznia tylko wtedy, gdy używasz notacji nawiasów klamrowych
[]
w EL, tak jak w#{bean.collection[index]}
przypadku, gdy#{bean.collection}
sam jest różny od null, ale element o określonym indeksie nie istnieje. Taką wiadomość należy wówczas interpretować jako:Rozwiązanie jest również takie samo jak w # 2: upewnij się, że przedmiot kolekcji jest dostępny.
5. Target Unreachable, „BracketSuffix” zwrócił wartość null
Ma to faktycznie tę samą przyczynę, co # 4, tylko używana (starsza) implementacja EL jest nieco błędna w zachowaniu indeksu iteracji, który ma być wyświetlany w komunikacie o wyjątku, który ostatecznie jest nieprawidłowo ujawniany jako „BracketSuffix”, który jest w rzeczywistości znakiem
]
. To tylko utrudnia debugowanie i naprawianie, gdy w kolekcji znajduje się wiele elementów.Inne możliwe przyczyny
javax.el.PropertyNotFoundException
:źródło
#{bean.entity.property}
wyświetla wartość, ale<p:selectBooleanCheckbox value="#{bean.entity.property}"/>
kończy się niepowodzeniem. Mój boolean ma setera. Własność całkowitą tego samego podmiotu nie działa, gdy używany w polu wejściowym. Jakieś pomysły?Target Unreachable, identifier 'bean' resolved to null
W projektach maven z wieloma modułami (zawierającymi moduły dla ejb, web, ear) upewnij się, że twój web-module deklaruje zależność do twojego ejb-module. Bez tego@ManagedBean
nie można rozwiązać za pomocą JSF2.0 i musisz je zadeklarować wfaces-config.xml
. Około dwóch godzin zajęło mi zauważenie, że nie zadeklarowałem zależności od włączenia ejb do mojego modułu internetowego (miałem tylko ejb i sieć w moim uchu)@ManagedBean
klasy, nie należą do warstwy usług (projekt EJB) w pierwszej kolejności. Zobacz także stackoverflow.com/questions/13011392/jsf-service-layerDla tych, którzy wciąż tkwią ...
Używając NetBeans 8.1 i GlassFish 4.1 z CDI, z jakiegoś powodu miałem ten problem tylko lokalnie, a nie na zdalnym serwerze. O co chodzi:
-> używając javaee-web-api 7.0 zamiast domyślnej wersji pom dostarczonej przez NetBeans, czyli javaee-web-api 6.0, więc:
-> prześlij ten javaee-web-api-7.0.jar jako bibliotekę do na serwerze (folder lib w folderze domain1) i zrestartuj serwer.
źródło
Postanowiłem podzielić się moim odkryciem dotyczącym tego błędu po samodzielnym rozwiązaniu go.
Przede wszystkim rozwiązania BalusC należy traktować poważnie, ale w Netbeans istnieje inny prawdopodobny problem, o którym należy pamiętać, zwłaszcza podczas budowania projektu aplikacji korporacyjnej (EAR) przy użyciu Maven.
NetBeans generuje, do pliku nadrzędnego POM , to projekt EAR , to projekt EJB i projektu WAR . Wszystko inne w moim projekcie było w porządku i prawie założyłem, że problem jest błędem w prawdopodobnie GlassFish 4.0 (musiałem go zainstalować i podłączyć do Netbeans), ponieważ GlassFish 4.1 ma błąd Weld CDI, który sprawia, że osadzony GlassFish 4.1 w Netbeans 8.0. 2 bezużyteczne z wyjątkiem poprawki.
Rozwiązanie:
Aby rozwiązać błąd „ Element docelowy nieosiągalny, identyfikator„ ziarno ”został rozwiązany na wartość zerową”:
I Kliknij prawym przyciskiem myszy macierzysty projekt POM i wybierz opcję Właściwości . Pojawi się okno dialogowe właściwości projektu, kliknij „Źródła”. Zdziwisz się, widząc „ Źródło / Format binarny ” ustawioną na 1,5 i „ Kodowanie ” ustawioną na Windows 1250. Zmień „ Format źródłowy / binarny ” na 1.6 0r 1.7, w zależności od tego wolisz, aby Twój projekt był zgodny z CDI i „ Kodowanie ” do UTF-8.
Zrób to samo dla wszystkich innych podprojektów (EAR, EJB, WAR), jeśli nie są już kompatybilne. Uruchom projekt, a ten błąd nie pojawi się ponownie.
Mam nadzieję, że pomoże to komuś, kto ma podobny błąd.
źródło
Postanowiłem podzielić się swoim rozwiązaniem, ponieważ chociaż wiele odpowiedzi tutaj było pomocnych, nadal miałem ten problem. W moim przypadku używam JSF 2.3, jdk10, jee8, cdi 2.0 dla mojego nowego projektu i uruchomiłem moją aplikację na wildfly 12, uruchamiając serwer z parametrem standalone.sh -Dee8.preview.mode = true zgodnie z zaleceniami na stronie wildfly . Problem z "bean resolved to null" zniknął po pobraniu Wildfly 13. Wgranie dokładnie tej samej wojny do Wildfly 13 sprawiło, że wszystko działało.
źródło
Utknąłem na tym błędzie, ponieważ w klasie, która ma
@SpringBootApplication
opcję, zapomniałem podać nazwę pakietu kontrolera.Tym razem chciałem być bardziej szczegółowy, wskazując, które komponenty Spring musiał przeskanować, zamiast konfigurować pakiet podstawowy.
To było tak:
@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service"})
Ale poprawna forma to jedna z tych:
@ComponentScan(basePackages = {"br.com.company.project.repository", "br.com.company.project.service", "br.com.company.project.controller"})
@ComponentScan(basePackages = {"br.com.company.project")
Postanowiłem podzielić się swoim rozwiązaniem, bo choć prawidłowa odpowiedź jest bardzo wyczerpująca, to nie obejmuje tego (idiotycznego) błędu :)
źródło
W moim przypadku popełniłem błąd w pisowni @Named („beanName”), miało to być „beanName”, ale napisałem na przykład „beanNam”.
źródło
Używam Wildfly 10 dla kontenera javaee. Wystąpił problem „Cel nieosiągalny,„ obiekt ”zwrócił wartość null”. Dzięki za sugestie BalusC ale mój problem z rozwiązaniami wyjaśniony. Przypadkowe użycie polecenia „import com.sun.istack.logging.Logger;” zamiast „import org.jboss.logging.Logger;” spowodowało, że CDI zaimplementował JSF EL. Mam nadzieję, że pomoże to ulepszyć rozwiązanie.
źródło
Miałem ten sam problem. Rozwiązanie okazało się znacznie prostsze. Wygląda na to, że datatable chce mieć metodę w postaci metody pobierającej, tj. GetSomeMethod (), a nie tylko someMethod (). W moim przypadku w datatable dzwoniłem do findResults. Zmieniłem metodę w fasoli zapasowej na getFindResults () i zadziałało.
Polecenie commandButton działało jako funkcja znajdowania bez polecenia get, co sprawiało, że było tylko bardziej zagmatwane.
źródło
Jeśli chodzi o # 2, w moim przypadku magicznie ożył po wymianie
tag z
Po wykonaniu kilku (prostszych, szczerze mówiąc) projektów JSF, nie mogłem sobie przypomnieć, żebym robił teraz coś innego podczas konfiguracji i po raz pierwszy dostałem tego rodzaju błąd. Tworzyłem bardzo podstawową stronę logowania (nazwa użytkownika, hasło, użytkownik Bean ...) i konfigurowałem wszystko jak zwykle. Jedyną różnicą, jaką zauważyłem, są wspomniane wcześniej tagi. Może ktoś uzna to za przydatne.
źródło
Problem w moim przypadku polegał na tym, że dołączyłem konstruktora pobierającego parametry, ale nie pustego konstruktora z adnotacją Inject, jak to.
Właśnie przetestowałem to bez żadnego konstruktora i wydaje się, że to również działa.
źródło
Dla 1. tematu ( Cel nieosiągalny, identyfikator „ziarno” rozwiązany na zero );
Sprawdziłem cenne odpowiedzi @BalusC i innych współdzielących, ale przekraczam ten problem w moim scenariuszu. Po utworzeniu nowego xhtml o innej nazwie i utworzeniu klasy bean o innej nazwie, napisałem (nie kopiuj-wklej) kody krok po kroku do nowej klasy bean i nowego pliku xhtml.
źródło
Kiedy usuwam parametr kontekstu AnnotationConfigWebApplicationContext z pliku web.xml To jest praca
Jeśli masz podobny parametr, który jak pokazano poniżej, musisz go usunąć z pliku web.xml
źródło
Praca z JSF w starym stylu Musisz zdefiniować zarządzany bean w pliku beans-config.xml (znajdującym się w folderze WEB-INF) i odnieść się do niego w pliku web.xml w ten sposób:
fasola-config.xml
(Próbowałem użyć innych teleskopów, ale ...)
web.xml
źródło
Kolejna wskazówka: używałem JSF i dodałem zależności mvn: com.sun.faces jsf-api 2.2.11
Następnie próbowałem przejść na Primefaces i dodać zależność primefaces:
Zmieniłem mój xhtml z h: na p:, dodając xmlns: p = "http://primefaces.org/ui do szablonu. Tylko z JSF proyect działał ok, a managedbean osiągnął ok. Po dodaniu Primefaces Otrzymywałem nieosiągalny obiekt (javax.el.propertynotfoundexception). Problem polegał na tym, że JSF generował ManagedBean, a nie Primefaces, i pytałem o obiekt primefaces. Musiałem usunąć jsf-impl z mojego .pom, clean i zainstaluj proyect. Od tego momentu wszystko poszło dobrze. Mam nadzieję, że to pomoże.
źródło
EL interpretuje $ {bean.propretyName} zgodnie z opisem - propertyName staje się getPropertyName () przy założeniu, że używasz jawnych lub niejawnych metod generowania getter / setters
Możesz zmienić to zachowanie, jawnie identyfikując nazwę jako funkcję: $ {bean.methodName ()} To wywołuje metodę funkcji Name () bezpośrednio bez modyfikacji.
Nie zawsze jest prawdą, że twoje metody dostępu noszą nazwę „get ...”.
źródło
action="#{bean.property}"
zamiastaction="#{bean.method}"
.W moim przypadku brakowało pliku „el-ri-1.0.jar”.
źródło