Ich möchte einen Text im JSF-Bildschirm anzeigen, indem ich ein Attribut an eine Methode übergebe, die in Backing Bean implementiert ist. Ich muss einen dynamischen Wert als Attribut übergeben. Ich habe das unten versucht, aber es scheint eine falsche Syntax zu sein -
%Vor% Abgesehen von dem Syntaxfehler (Sie können EL-Ausdrücke niemals als #{#{}}
verschachteln), gilt folgendes in EL 2.2, das wiederum Teil von Servlet 3.0 / Java EE 6 ist:
Wenn Sie also eine mit Servlet 3.0 kompatible Ziel-Laufzeitumgebung (Tomcat 7, Glassfish 3, JBoss 6 usw.) mit einem Servlet 3.0-kompatiblen web.xml
haben, können Sie Nicht-Getter-Methoden mit Argumenten wie diesem aufrufen.
Allerdings verwenden Sie basierend auf Ihrem Frageverlauf JSF 1.2 und die Wahrscheinlichkeit ist groß, dass Sie auch auf einen älteren Container abzielen, in dem das oben genannte nicht funktioniert. Wenn es sich um einen Servlet 2.5-Container handelt, können Sie JBoss EL verwenden um diese EL-Syntax zu erhalten.
JSF 1.2 w / EL 2.1 (die übliche Paarung) unterstützt keine Aufrufmethoden mit Parametern für Beans, die EL-Ausdrücke verwenden. Es gibt einen Hack, der die Tatsache missbraucht, dass JSF EL-Ausdrücke auf Karten funktionieren:
value="#{myBean['product']}"
Dies setzt voraus, dass myBean die Map-Schnittstelle implementiert und die get-Methode mit 'product' als Parameter aufrufen wird. Ich weiß nicht, ob der Schlüssel dynamisch berechnet werden kann, aber es ist einen Versuch wert. Syntax wäre:
value="#{myBean[item.product].component.address}"
Angenommen, myBean implementiert die Map-Schnittstelle und gibt das entsprechende Objekt zurück. item.product gibt eine Zeichenfolge zurück. Ich bin nicht sicher, dass dies funktioniert, aber es ist Ihre einzige Option neben der Implementierung eines Getters, der in seiner Implementierung den Wert von item.product nachschlägt.