# Methode einer Bean aus anderer Bean aufrufen



## Ed77 (21. Apr 2009)

Hi. Ich habe ein Problem. Ich möchte die Werte einer Bean in einer anderen Bean über die Setter neu setzen. Bisher habe ich es so gemacht:

Bean1 bean = new Bean1();
bean.setWert("wert");

Das hat auch funktioniert, allerdings nur weil ich die Variablen in Bean1 static deklariert habe.
Wie bekomme ich das Ganze ohne static hin? Ich muss ja irgendwie die aktuelle Referenz übergeben per this oder? Funktioniert irgendwie aber nicht?
Ich arbeite übrigens mit myfaces und tomahawk. Evtl gibt es dort noch eine andere Lösung.

Wäre für jede Hilfe dankbar (am besten mit Beispielcode).


----------



## SlaterB (21. Apr 2009)

Bean1 bean = new Bean1();
bean.setWert(anderesBean.getWertX());
oder
bean.setWert(this.getWertX());


----------



## Ed77 (21. Apr 2009)

Funktioniert leider nicht. Die andere Bean bleibt leer.
Habe jetzt so:

```
public class Bean1
{ 
   private String _name;
   public String getName() 	{ return _name; } 
   public void setName(String name) 	{ _name = name; }
}

public class Bean2
{ 
   private String _name2;
   Bean1 bean = new Bean1();
   _name2 = "Egon";	
   bean.setName(this.getName2());

   public String getName2() 	{ return _name2; } 
   public void setName2(String name2) 	{ _name2 = name2; }
}
```


----------



## maki (21. Apr 2009)

Ist zwar älter, sollte aber immer noch funzen: The BalusC Code: Communication in JSF

Da gibt es Beispiele für mehrere Anwendungsfälle im bezug auf JSF, deiner kommt weiter unten.


----------



## SlaterB (21. Apr 2009)

> Die andere Bean bleibt leer.

wie stellst du das fest?

----

der Code der Klasse Bean2 ist gar nicht kompilierbar/ ausführbar,
direkt in der Klasse darf kein Code wie 
> _name2 = "Egon";
stehen, der gehört in Methoden oder Konstruktoren


----------



## Ed77 (21. Apr 2009)

> wie stellst du das fest?


Weil meine JSP nichts anzeigt.


> der Code der Klasse Bean2 ist gar nicht kompilierbar/ ausführbar


Stimmt sorry. Der Code steht aber natürlich in einer Methode.


> The BalusC Code: Communication in JSF


Du meinst bestimmt den Absatz "Returning current managed bean instance of self". Das hatte ich auch schon probiert, bekomme allerdings immer eine NullPointerException. Es funktioniert weiterhin nur mit static ... ;(


----------



## seppitm (21. Apr 2009)

Versuch doch mal so:

```
DeineBean deineBean= (DeineBean) ContextUtil.getValueBinding("deineBean");
```
dann kannste sie verwenden


----------



## maki (21. Apr 2009)

> Du meinst bestimmt den Absatz "Returning current managed bean instance of self". Das hatte ich auch schon probiert, bekomme allerdings immer eine NullPointerException. Es funktioniert weiterhin nur mit static ...



Nein, sondern "Accessing another managed bean", da werden 8 (!) Wege beschreiben wie das geht.. 
Könnte natürlich sien dass es mittlerweile elegantere/einfachere Wege gibt.

Ansonsten: Wie fit bist du in Java?
Wenn du noch Anfänger bist, ist JSF bzw. WebAnwendungen in Java allgemein nix für dich, ausser du suchst Frust (nicht böse gemeint).


----------



## SlaterB (21. Apr 2009)

> Weil meine JSP nichts anzeigt.

na das läßt sich aus deinen einfachen Code-Ausschnitten ja nicht herleiten,
da könnten tausend andere Dinge schiefgehen, z.B. ein ganz anderes Bean der gleichen Klasse verwendet werden

gib z.B. zum Namen zusätzlich den hashCode aus, um zu erkennen, um welches Objekt sich handelt

public String getName() 	{ return _name + " - " +hashCode(); } 

macht sicher nur Sinn, wenn du auch während des vermeintlichen Setzens prüfen kann, in welchem Objekt gespeichert wird,
Logging oder Debugging sind das A und O jeder Entwicklung

----

in diesem Falle aber vielleicht auch kompliziert für dich,
poste mehr von dem JSP, allen Verknüpfungen, Weiterleitungen, Bean-Deklarationen, web.xml und was es nicht alles gibt,
muss aber wahrscheinlich dennoch jemand anders beantworten,

wenn's nach Standard-Tutorials wie dem obigen Link funktioniert, umso besser


----------



## Ed77 (21. Apr 2009)

Vielen Dank für Eure Anworten. Ich werde mir den Absatz "Accessing another managed bean" nochmal angucken. Den hatte ich vorher gar nicht gesehen 
Mal sehen, ob es damit klappt.


----------



## Ed77 (21. Apr 2009)

Es funzt!! Geil...Danke


----------

