# JSF - Aktion und Navigation in einem?



## SaschaLR (5. Jul 2007)

Hallo,

ich habe da ein dickes Problem bei dem ich noch nicht vorwärts komme.

Ich habe eine Tabelle mit div. Columns, eine sieht so aus:


```
<h:commandLink value="#{user.name}" actionListener="#{NewUserBean.edit}" immediate="true">
     <f:param name="editid" id="editid" value="#{user.id}" />
</h:commandLink>
```

Und die Methode dahinter sieht so aus:


```
public String edit(ActionEvent ae) {
     UIParameter component = (UIParameter) ae.getComponent().findComponent("editid");
     long loadID = Long.parseLong(component.getValue().toString());
		
     .....
     return "edit";
}
```

Hier der Auszug aus der faces-config.xml


```
<navigation-rule>
        <from-view-id>/blah/list.jsp</from-view-id>
	<navigation-case>
		<from-outcome>edit</from-outcome>
		<to-view-id>/user/edit_user.jsp</to-view-id>
	</navigation-case>
</navigation-rule>
```

Ziel ist es, in der Tabelle, die je einen User pro Zeile hat, einen Namen anzuklicken, den pasenden User zu laden und auf der nächsten Seite editieren zu können.


Also .... die Navigation funktioniert hier nicht und ich habe den Verdacht, dass es daran liegt, dass ich von einem actionListener keine Rückgabe für die Navigation verwenden kann. Stimmt das so?

Kann ich nur eines von den beiden haben:


```
public void method_a(ActionEvent ae){
}

public String method_b(){
     return "some code";
}
```

Oder bin ich völlig auf dem falschen Dampfer? H i l f e e e e 

Gruß und vielen Dank,
Sascha


----------



## WeirdAl (5. Jul 2007)

> Also .... die Navigation funktioniert hier nicht und ich habe den Verdacht, dass es daran liegt, dass ich von einem actionListener keine Rückgabe für die Navigation verwenden kann. Stimmt das so?


Daran liegts. Benutz doch einfach action="" anstatt actionListener="". Das ActionEvent brauchst Du nicht zwingend um an den Tabelleneintrag zu kommen. Schau mal hier nach. Evtl. hilft Dir das.

Cu
Alex


----------



## SaschaLR (5. Jul 2007)

Vielen Dank! Das sieht sehr vielversprechend aus!!!!



> Clicking at the h:commandLink of every row will invoke the editMyData() method of the backing bean MyBean.java. The MyData item belonging to the row can be retrieved using the getRowData() method of the HtmlDataTable class, which is bound by h:dataTable binding. Finally store the MyData item as myDataItem.



Der vorletzte Satz ist mir noch nicht ganz klar. Was muss ich da als Binding angeben??? (Habs noch nicht probieren können... hab den Krempel in der Arbeit)

Dank und Gruß, Sascha

EDIT: Ich hab nochmal angestrngt nachgedacht und schnell was an einem anderen Heimprojekt gebastelt. Es hat geklappt... und das auf Anhieb! Super vielen Dank nochmals!

Meine Frage beantworte ich auch selbst schnell: Das Binding-Attribut des <h:dataTable /> in der JSP muss ein HTMLDataTable Objekt in der Bean referanzieren. Wie auch sonst soll man leicht an die Table und damit die Daten kommen? 

SUPER


----------



## A.T. (17. Mrz 2008)

Das hier ist zwar alles schon etwas länger her aber könntest du dazu mal etwas Sourcecode posten? Wäre super!


----------

