# JSF Parameterübergabe



## Guest (3. Jul 2008)

Hallo,

ich habe ein kleines Verständnisproblem bzgl. JSF. Zuvor habe ich mich nur mit JSP-Dateien beschäftigt, so dass ich hier vielleicht nicht die benötigte Objektivität habe.

Ich habe eine View, die eine Ergebnisliste beinhaltet. Nun soll man per Klick auf eines dieser Ergebnisse in eine andere View geleitet werden um Details zu der Auswahl angezeigt zu bekommen. Eine ensprechende ID soll übergeben werden.

Bei JSP-Dateien hänge ich die Id einfach an die URL ("details.jsp?id=1"). Bei JSF ist das so ja glaube ich nicht gedacht. Wie macht man es denn dort?


----------



## Guest (10. Jul 2008)

Benutz <faram /> für die Parameterübergabe


```
<h:dataTable var="data" value="#{ManagedBean.list}">
 <h:column>
   <f:facet name="header">
     <h:outputText value="Title"/>
   </f:facet>
   <h:commandLink action="#{ManagedBean.myMethod}">
     <h:outputText value="#{data.title}"/>
       <f:param name="id" value="#{data.ID}"/>
   </h:commandLink>
 </h:column>
 </h:dataTable>
```

Den Parameter kannst Du dann über die ParameterMap auslesen.  Der Map-Key ist der Parametername.


```
Map paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
```

Gruß,

Charly


----------



## Guest (10. Jul 2008)

Ok, das hab ich soweit verstanden. Gibts denn auch eine Möglichkeit erst in der Action und dann in der entsprechenden JSF-Seite zu landen so dass ich die Komponenten mit den Werten der Parameter füllen kann?


----------



## Pansen44 (31. Jul 2008)

MMM, ich glaube du hast ein grundsätzliches Verständnis Problem mit JSF.

1. JSF unterstützt ein deklaratives Navigationsmodel! 
Das heißt du kannst in einer Action Ereignisse defineren in Anbängigkeit desen die Navigation erfolgt. Dieser scheiß mit der Parameter übergabe würde ich von vorne rein lassen, das führt nur zum Problemen!!!! (Ich arbeite seit 1 1/2 im JSF Bereich und darf solche Hacks jedensmal korregieren)

2. Unterstützt JSF das Komponenten Binding Prinzip:

Du kannst deine Datatable von der Oberfläche  mit deiner Action in der Managed Bean verknüpfen.


BSP:
JSF Seite:

<h:datatable
value='#{backingBean.myList}'
var='entry'
binding='#{backingBean.myTable}'>
<h:column>
<h:commandButton value='#{entry.name}' 
action='#{backingBean.navigation}'
actionListener='#{backingBean.selectedEntryAction}'/>
</h:column> 
<h:column>
<h:commandButton value='#{entry.name}' 
action='#{backingBean.navigation}'
actionListener='#{backingBean.selectedEntryAction}'/>
</h:column>
....
</h:datatable>

Managed Bean

...


private  UIData myTable;!!! der client-spezifische Renderer ist die //Klasse HTMLDatatable und kann auch verwendet werden

public void selectedEntryAction(ActionEvent arg0){
  Entry selected = (Entry) myTable.getRowData();
//getRowData ist eine Standard Methode zum holen eines Objekts
//aus der Oberfläche!

}


public String navigation(){

return "viewId"; //oder irgende Navigationslogik!
}



Das sollte dir weiter helfen!!



Gruß!


----------

