Anfängerfrage in JSF: <h:inputText> aus Managed Bean ansprechen

Status
Nicht offen für weitere Antworten.

KaffeeKlaus

Mitglied
Hallo zusammen,

ich bin gerade dabei mich in JSF einzuarbeiten und habe eine Frage: Wie kann man aus einer Managed Bean ein Steuerelement aus einem Facelet ansprechen?

Beispiel:
Code:
<h:inputText value="blablub" id="input_table_id" size="10"/>

Ist es möglich über die ID "input_table_id" eine Referenz auf das InputText-Element zu bekommen um Attribute zur Laufzeit zu ändern?

Danke,
Klaus
 
Weiß nich ob ich die Frage richtig verstehe, aber wenn du einfach ne BeanEigenschaft mit dem inputText verknüpfst, dann ist das sozusagen eine Zwei-Wege-Verbindung. D.h. wenn der Benutzer den Wert im UI ändern, dann ändert sich auch der Wert im Bean-Objekt und umgekehrt.

Code:
<h:inputText value="#{meineBean.meinInput}" id="input_table_id" size="10"/>
 

mmeyer1987

Mitglied
Hallo,

Beispiel:
Code:
<h:inputText value="blablub" id="input_table_id" size="10"/>

Ja, ist es, in der Bean kannst du folgendes machen:
Java:
FacesContext context = FacesContext.getCurrentInstance();
HtmlInputText meinFeld;

		if (context != null) {
			UIComponent root = context.getViewRoot();
			meinFeld = findComponent(root, "input_table_id");
		}

Und dann kannst du Attribute setzen, wie
Java:
meinFeld.setRendered(false)
Damit z.B. bestimmst du, ob das Feld gerendert wird oder nicht. Hast alle Möglichkeiten offen...wenn ich dich richtig verstanden habe.

Grüße

Manuel
 
Zuletzt bearbeitet:

KaffeeKlaus

Mitglied
Danke für die Antworten! MMeyer hat meine Frage richtig verstanden.

@MMeyer: Dein Beispiel funktionert bei mir leider nicht :-(
Ich bekomme da mit den id-Attributen von der Facelets-Seite nichts zurück. Da geht es irgendwie um automatisch generierte IDs. Folgender Code:

Code:
Iterator<UIComponent> it = context.getViewRoot().getFacetsAndChildren();
      while (it.hasNext()){
         UIComponent component = it.next();
         String test = component.getId();
         System.out.println("Found " + test);
      }

...liefert bei mir das zurück:
Code:
Found j_id0
Found j_id1

...und diese IDs stehen bei mir nirgendwo.
 

mmeyer1987

Mitglied
Hi,

Hm, hast du keine Möglichkeit, folgendes zu machen:

Java:
Iterator<UIComponent> it = context.getViewRoot().getFacetsAndChildren();
      while (it.hasNext()){
         UIComponent component = it.next();
         String test = component.getClientId();
         System.out.println("Found " + test);
      }

Die getID() Methode liefert generierte IDs.

Guck dir vielleicht dieses hier mal an: Klick mich

Gruß
 
Zuletzt bearbeitet:

JanHH

Top Contributor
Also wenn ich sowas als "Anfängerfrage" lese frage ich mich eher, ob da nicht irgendwo anders das eigentliche Problem ist. Wozu braucht man denn überhaupt diese Möglichkeit? _Wenn_ man sie braucht, befindet sich die Applikation sicherlich schon auf einem Niveau, was man nicht mehr "Anfänger" nennen kann.
 

JanHH

Top Contributor
Ich würde zumindest auch das ändern sämtlicher Attribute des Eingabefeldes zur Laufzeit durch das verdrahten selbiger per Value Expression mit der dahinterliegenden Bean machen.. damit hat man ja unterm Strich die gleichen Möglichkeiten, aber das ist wohl eher so, wies gedacht ist. Die sauberere Lösung. Sonst packst Du Code, der das Verhalten der JSF-Seite steuert, nicht in die Seite, sondern in eine Bean, und verheiratest die beiden damit ziemlich fest miteinander. Das ist kein sauberes Design.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben