2016-09-08 12 views
0

Ich versuche this tutorial, die beschreibt, wie Attribute in Serveraufruf und wie die Attribute auf Backing Bean zu analysieren;Ajax Anfrage und Attribute

<h:commandButton id="submit" 
actionListener="#{userData.attributeListener}" action="result"> 
    <f:attribute name="value" value="Show Message" />     
    <f:attribute name="username" value="JSF 2.0 User" /> 
</h:commandButton> 

gegoogelt ich viel, aber die meisten Beispiele zeigen, wie attrs für Synch-ed einzustellen ruft nicht die asynch-ed diejenigen: S Also meine Frage ist ... wie Attribute auf Server zu senden, wenn das der wäre Ajax-Aufruf und wie man sie auf Backing Bean bekommt (siehe Vorschlag Ein Code-Snippet)?

Vorschlag A:

<h:commandButton id="submit" 
    actionListener="#{userData.attributeListener}" action="result"> 
     <f:ajax> 
      <f:attribute/>? how to 
     </f:ajax> 

    </h:commandButton> 

und wenn es ein gutes Tutorial auf diese Frage bitte den Link teilen :)

Dank

+0

Was ist eigentlich das Problem? Im Allgemeinen wird 'f: attribute' in einer Befehlskomponente wie' commandButton' selten für diesen Fall verwendet. Sie sollten das 'action'-Attribut der Schaltfläche und 'f: setPropertyActionListener' einfacher verwenden, um eine Backing-Bean-Eigenschaft oder' h: inputHidden' festzulegen. – djmj

+0

@djmj Das Problem besteht darin, die Werte von zwei Tags in einer Anfrage als # {tagAValue} und # {tagBValue} mehr oder weniger optimal zu senden; – cbhogf

+1

Oder verwenden Sie eine neuere Version von EL, wo Sie einfach Parameter an Methoden übergeben können ... Ich brauchte nie Konstruktionen wie diese zu verwenden. – Kukeltje

Antwort

0

OK Ich habe gerade einen Test schrieb die setzt Attribute aus dem Ajax-Block als:

<h:commandButton id="submit" 
    actionListener="#{userData.callWithAttributes}" action="result"> 
     <f:attribute name="a" value="#{testa}"/> 
     <f:attribute name="b" value="#{testb}"/> 
     <f:ajax .../> 
</h:commandButton> 

... und auf dem Träger Bohne

... 
public void callWithAttributes(ActionEvent e){ 
    String a=(String) e.getComponent().getAttributes().get("a"); 
    ... 
} 
... 

Scheint, wie es also Attribute fein :) arbeitet in ereignis machen Komponentenblock platziert werden soll - die h:commandButton in diesem speziellen Fall ...

0

To Satz zwei Eigenschaften in Backing Bean Sie f:setPropertyActionListener

<h:commandButton action="#{bean.method}"> 
    <f:setPropertyActionListener value="#{testA}" target="#{bean.valueA}/> 
    <f:setPropertyActionListener value="#{testB}" target="#{bean.valueB}/> 
</h:commandButton> 

oder mit EL-Methode Argument Unterstützung verwenden können:

<h:commandButton action="#{bean.method(testA, testB)}"/>