# JSF Parameter auslesen



## ~Steve~ (16. Okt 2007)

Ich habe folgendes Fragment:


```
<t:panelGrid>  
                             
               <h:outputLink  value="#" onclick="viewDialog.show();">                    
                     <h:outputText value="#{message.assign}"/>  
                      <f:param id="dataId" value="#{bean.objId}" name="dataId"/>                               
               </h:outputLink>
             
</t:panelGrid>
```


Beim Aufruf des Links öffnet sich der Dialog und es steht im URL:

http://localhost:8080/MyProject/faces/main_view.jsp#?dataId=443951


Code zum Schließen des Dialogs:


Wird der javascript Dialog geschlossen wird eine Action in der Bean aufgerufen


```
<t:commandButton id="ok" forceId="true" value="Speichern" actionListener="#{Actions.test}" onclick=" window.parent._myfaces_currentModal._myfaces_ok=true;window.parent._myfaces_currentModal.hide();"  />
```


Auszug aus Actions.java


```
public void test(ActionEvent e) {
    
    System.out.println("action aufgerufen");
    UIParameter component = (UIParameter) e.getComponent().findComponent("dataId");

    try {
      System.out.println("ausgegeben: "+component.getValue().toString());

    }
    catch (NullPointerException ex) {
      System.out.println("Fehler: "+ex.getLocalizedMessage());
    }

  }
```


Ausgabe:

Fehler: null


Wie komme ich hier in der action richtig an die dataId heran ? :-/


Danke im voraus!

Gruß


----------



## maki (16. Okt 2007)

```
public void myActionListener(ActionEvent event) {

      List children = event.getComponent().getChildren();
      Object value = ((UIParameter) children.get(0)).getValue();
...
```

Woran liegt es, dass Leute immer wieder versuchen einem Parameter eine ID zu geben (selbst wenn sie ansonsten keine IDs vergeben) und über diese dann versuchen den Wert rauszufinden???

Ids sind für deine Komponenten


----------



## ~Steve~ (16. Okt 2007)

Danke, ich hab mich schon so gefreut, aber:



```
List children = event.getComponent().getChildren();
Object value = ((UIParameter) children.get(0)).getValue();
```

ArrayIndexOutofBoundsException, children.size() = 0



 :bahnhof: 


Allerdings verwende ich eine Id für <faram auch an anderer Stelle und da klappt es 




```
<t:commandLink id="meetinglink" action="createMeeting" actionListener="#{MeetingBean.setmeeting}" value="Anzeigen" >
        <f:param id="meeting" name="meeting" value="#{meeting.objId}" />
 </t:commandLink>
```





```
public void setMeeting (ActionEvent event) {
    UIParameter component = (UIParameter) event.getComponent().findComponent("meeting");
    Long meetingObjid = new Long(component.getValue().toString());
    //....
  }
```


----------



## maki (16. Okt 2007)

Steve, der parameter muss schon in dem Request zum Server mitgeschickt werden


----------



## ~Steve~ (16. Okt 2007)

Mist. keine alternative Möglichkeit ?

auf clientseite per javascript irgendwie speichern , weiß aber nicht wie :-(


----------



## maki (16. Okt 2007)

Dein Paramter müsste hier mitgeschickt werden:


> Wird der javascript Dialog geschlossen wird eine Action in der Bean aufgerufen
> 
> 
> ```
> ...


----------



## ~Steve~ (16. Okt 2007)

und genau hier liegt das mir unverständliche Problem. Dieser Dialog ist Bestandteil von myfaces Sandbox

wenn man sich hier die jsp source anguckt, stellt man fest, dass bei diesen beispielen ausschließlich der dialog innerhalb eines <hutputlinks> angezeigt wird.

http://www.irian.at/myfaces-sandbox/dojo/dojoDialog.jsf

Verwende ich nun genau dieses Konstrukt, nämlich einen commandLink oder commandButton


```
<t:commandButton id="ok" forceId="true" value="Speichern" actionListener="#{Actions.test}" onclick=" window.parent._myfaces_currentModal._myfaces_ok=true;window.parent._myfaces_currentModal.hide();"  />
```


wird die action zwar ausgelöst und ich hab endlich den parameter und den wert da wo ich ihn haben will, schließt sich dieser dialog allerdings sofort wieder. er poppt kurz auf und nach Beendigung des requests isser wieder weg :-(



Hm ich steh kurz davor diesen ganzen Ajax Rotz rauszuwerfen. Weg damit.


----------



## maki (16. Okt 2007)

> wird die action zwar ausgelöst und ich hab endlich den parameter und den wert da wo ich ihn haben will, schließt sich dieser dialog allerdings sofort wieder. er poppt kurz auf und nach Beendigung des requests isser wieder weg :-(


Parameter haben nunmal nur den Request scope 

Versuche doch mal, ein inputhidden feld mit dem Wert von param zu füllen


----------



## ~Steve~ (16. Okt 2007)

OK; 

also ich denke dass problem welches ich nun habe, ist diesen parameter aus

main_view.jsp


```
<t:panelGrid> 
                             
               <h:outputLink  value="#" onclick="viewDialog.show();">                   
                     <h:outputText value="#{message.assign}"/> 
                      <f:param id="dataId" value="#{bean.objId}" name="dataId"/>                               
               </h:outputLink>
             
</t:panelGrid> 


<s:modalDialog            
       		dialogId="viewDialog"
       		dialogVar="viewDialog"
       		styleClass="viewDialog"
       		dialogTitle="Einen Datensatz auswählen"  
       		     	           		      		      		       		     		       		
       		viewId="/faces/dialog.jsp">      		  
       		 
        </s:modalDialog>
```



irgendwie in die jsp Seite, welche in dem Dialog angezeigt wird "rüberzuretten" und dann, mit dem Schließen des Dialogs den param aus main_view.jsp zu übermitteln. Aber wie geht das genau ? Hilfe.

dialog.jsp


```
<t:commandButton id="cancel" forceId="true" value="Abbrechen" onclick="window.parent._myfaces_currentModal.hide();" />
                 <t:commandButton id="ok" forceId="true" value="Speichern" actionListener="#{Actions.test}" onclick=" window.parent._myfaces_currentModal._myfaces_ok=true;window.parent._myfaces_currentModal.hide();">


                    //nein so gehts nicht
                    <f:param id="dataId" name="dataId" value="#{bean.objId}"/>

                   //als Bsp würde das zumindest funktionieren
                    <f:param id="sedcard" name="sedcard" value="fritz"/>


                 </t:commandButton>
```


----------

