2009-05-12 3 views
0

Ich bin auf der Suche nach einer einfachen Möglichkeit, eine Bean-Methode aufzurufen, die keine Parameter akzeptiert und eine Zeichenfolge in JSF zurückgibt. Die Sache, die ich nicht wirklich brauche, ist, dass die Methode ein Aktionsergebnis zurückgibt und dann den gesamten JSF-Lebenszyklus benutzt, um mich zu einer anderen Ansicht zu bringen. Ich muss das von JavaScript aus tun, damit ich einige clientseitige Teile der Anwendung zusammenstellen kann und über den A4J-Teil von RichFaces gegangen bin, hat mir bisher nichts gebracht.Aufruf von JavaScript zu serverseitigem Code in JSF

Also hier ist das Szenario wieder in einer Schritt-für-Schritt-Form:

  1. von JS Problem einer GET auf einige Adresse
  2. auf dem Server-Prozess, JSON oder HTML-GET und zurück (im Grunde eine Zeichenfolge)
  3. sobald die Anfrage zurück an den Client gesendet wird, möchte ich in der Lage sein, es weiter mit JS zu verarbeiten.

Vielen Dank!

Antwort

2

Verwenden Sie a4j: jsFunction und das Datenattribut.

So grob wollen Sie so etwas wie:

<button onclick="callBackend();">Go</button> 

<a4j:jsFunction name="callBackend" action="#{myBean.someMethod}" data="#{myBean.someString}" oncomplete="handleResponse(data);"/> 

<script> 
function handleResponse(response) { 
    alert(response); 
} 
</script> 
+0

Grob ja, aber ich würde lieber das Ergebnis von someMethod zurückgegeben werden, anstatt von myBean.getSomeString(). –

+0

Ich habe es nicht versucht, aber Sie könnten die Aktion fallen lassen und die someMethod() in die Daten einfügen? – Damo

+0

Ich habe das getan. Es ist nur so, dass die Datenmethode wie ein Getter definiert werden muss (String getSomeMethod()). Ansonsten funktioniert es. Vielen Dank! –

0

Damo: Können Sie erklären, warum es nur zum ersten Mal wird die Methode callBackend ausgeführt funktionieren könnte? Ich habe ein merkwürdiges Verhalten, dass der erste Anruf erfolgreich ist und die nächsten Anrufe nur blockiert werden. Ich sehe, dass der serverseitige Code ausgeführt wird, aber einige seltsame Ergebnisse werden zurück an den Browser gesendet (etwas wie der _viewstate und diese Art von Dingen).

+0

Nicht sicher. Ich habe diese Art von Verhalten schon einmal erlebt, als ich die Region, in der sich das Skript befindet, erneut vergebe. Stellen Sie also sicher, dass Sie den Button oder die jsFunction nicht erneut eingeben. – Damo