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



## KaffeeKlaus (13. Nov 2009)

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:

```
<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


----------



## professorchimp (13. Nov 2009)

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.


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


----------



## mmeyer1987 (13. Nov 2009)

Hallo,



KaffeeKlaus hat gesagt.:


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



Ja, ist es, in der Bean kannst du folgendes machen:

```
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 
	
	
	
	





```
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


----------



## KaffeeKlaus (16. Nov 2009)

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:


```
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: 

```
Found j_id0
Found j_id1
```

...und diese IDs stehen bei mir nirgendwo.


----------



## mmeyer1987 (16. Nov 2009)

Hi,

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


```
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ß


----------



## JanHH (19. Nov 2009)

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 (20. Nov 2009)

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.


----------

