# JSF: Methode mit Parametern aufrufen



## schlumsch (29. Jan 2009)

Hallo,

kurze Frage, ich möchte aus einem xhtml-file heraus eine Bean-Methode
aufrufen und dieser dabei Parameter übergeben. 
So ungefähr habe ich mir das gedacht 


```
public void Test(String a) {
...
}
```


```
<h:commandButton value="Testmethode(a)" action="#{planingResults.testmethod}" style="width:170px;">
						<f:param name="a" value="uebergabewert in da hause"/>
</h:commandButton>
```

Sicher nicht verwunderlich das das so nicht geht (für den Profi) ... kann mir jemand sagen wie ich die Parameterüberagbe machen kann?

Dabei möchte ich nicht eine Variable im bean setzen und dann aus meiner Methode heraus darauf zugreifen, da ist mir klar wie es geht.

Thx, lg


----------



## Shoodan (29. Jan 2009)

du kannst in JSF keine methode mit parameter beunutzen.

benutze sowas in der art:

		    <h:commandLink action="test" actionListener="#{bean.actioneventMethode}">
		    	<hutputText value="Edit" />
		    	<faram id="editId" name="id" value="#{objekt.attribut}" />
		    </h:commandLink>


und die actionmethode schaut dann ungefähr so aus (value ist hier ein Integer):

		UIParameter component = (UIParameter) event.getComponent().findComponent("editId");
	    int selectedId = Integer.parseInt(component.getValue().toString());



noch fragen?


MFG

Thomas


----------



## schlumsch (29. Jan 2009)

öm, ja
wo kommt da meine Testmethode ins Spiel? in dem Link machst du doch nur ein action="test". Die ActionMethode ersetzt meine Test-Methode?
#objekt.attribut ist in deinem Beispiel dann der übergebene int?

lg


----------



## Shoodan (29. Jan 2009)

action=".." ist für die JSF Navigation, also du kommst dann auf eine andere Seite.

mit der actionEvent übergibst du dann quasi den Parameter an ein Attribut deiner Bean.

was deine testmethode genau macht weiß ich auch nicht.


----------



## schlumsch (29. Jan 2009)

Hmmm,

also das ich mit action="irgendwas" Navigation "betreibe" ist klar, ebenso kann ich aber auch mit action="methodenaufruf" eine Methode (nur eben ohne Parameter) aufrufen ... die Variante "assignto" mal außen vor. Nun kann ich mir an dem Code von dir oben schon ein wenig was erklären, nur verstehe ich value="#{objekt.attribut}" soie int selectedId = Integer.parseInt(component.getValue().toString());  nicht wirklich.

Was ich ab Ende habe will ist eigentlich folgendes:
Aus JSF/xhtml heraus einen Button / Link welcher eine Methode TestMethode aufruft und dieser einen String übergibt.

public void testMethode(String a) {
sysout(a);
}

Ganz trivial erst einmal zum Test.


----------



## Guest (6. Feb 2009)

Das, was Du vorhast sollte eigentlich schon ohne Probleme funktionieren. Beim Drücken eines Buttons wird ja ein ganz normales Request erzeugt, an das Du mit faram deine Parameter dranhängst. In deiner Action-Methode sollte es dann folgendermaßen aussehen (aus dem Kopf, also ohne Gewähr)


```
public String testMethode(){
    String meineId = FacesContext.getCurrentInstance().getRequestParameterMap.get("id");
    ...
}
```

die Methode getRequestParameterMap stimmt wahrscheinlich nicht so ganz, aber musst halt mal nach etwas ähnlichem schauen.

Viel Erfolg


----------



## Guest (6. Feb 2009)

Natürlich brauchst Du noch den ExternalContext... habs übersehen:


```
public String testMethode(){
    String meineId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap.get("id");
    ...
}
```


----------



## schlumsch (10. Feb 2009)

hmkay, in dem Fall sieht dann mein parameter so aus: <faram name="meineId" ... ??


----------

