JavaScript [JSF] Request-Antwort ohne Rendering verwende

Black_Panter

Ensign
Registriert
Mai 2006
Beiträge
197
Hi,

ich steh vor dem Problem, dass ich einen Ajax-Request abschicke und die Daten, die ich zurück bekomme gerne Clientseitig weiterverarbeiten möchte mit JavaScript.

Die Kommunikation an sich klappt wunderbar und wenn ich Testhalber die Daten render, wird mir das ganze auch korrekt angezeigt.

Ich hab schon versucht mit jsf.ajax.response() zu arbeite, jedoch komm ich zu keinem ergebnis.

Im Internet habe ich bisher auch nichts gefunden, womit ich auf die Lösung kommen würde.

Vom Prinzip her soll es so alufen, das ich über einen CommandButton oder CommandLink eine JavaScript Methode aufrufe, diese den Request abschickt, auf die Antwort wartet und diese dann verarbeitet. In meinem Konkreten Fall, soll es sich um ein JSON Object handeln.

Grüße
Sören
 
Wenn du nicht zwingend jsf.ajax verwenden musst, könntest du es z.B. folgendermaßen mit jQuery machen:

<a href="#" onclick="javascript:ajax();">ajax</a>

function ajax()
{
jQuery.ajax({ type: 'POST',
url: '/servlet123',
data: 'val1=1&val2=2',
dataType: "json",
success: function(json){ [...] }

}

In der Success-Funktion erhältst du direkt ein JSON-Object.
Oder suchst nach einer reinen jsf.ajax-Lösung?
 
welche JSF Version nutzt du denn 1.2 oder schon 2? Bei der 2er, die ich allerdings selbst noch nicht genutzt habe, gibt es AJAX Tags.

Ansonsten würde ich ein Framework wie Richfaces empfehlen. Dort gibt es z.B. die Funktion <a4j:jsFunction/> mit der man eine Methode einer Backingbean aufrufen kann. Daten bekommt man ebenfalls zurück, wenn man das "data" Attribut nutzt. Habe hier oft Methoden die einen String zurückliefern aufgerufen. Dieser String war aber vorher ein JSONObject, welches ich mit toString() zu einem String gewandelt hatte.

Alternativ kann man natürlich gleich einen EL-Ausdruck auswerten.

<h:panelGroup id="someId">
<script>
var x = #{demoManager.someValue};
alert(x);
</script>
...

durch eine reRender updated man dann die panelGroup.



.....

Methode aufrufe, diese den Request abschickt, auf die Antwort wartet und diese dann verarbeitet. In meinem Konkreten Fall, soll es sich um ein JSON Object handeln.

A steht für asynchron. Du brauchst einen Callbackhandler.

....

hier ein Beispiel mit richfaces 3.3.x und jsf 1.2:

<a4j:commandButton value="clickME" onclick="doSomething(); return false;"/>

<a4j:jsFunction name="doSomething" data="#{demoManager.someMethod}" oncomplete="myJSFunction(data);"/>

<script>
function myJSFunction(mydata){
..
}
</script>

ah, sehe gerade, man kann auch direkt den a4j:commandButton nutzen - ohne den Umweg über a4j:jsFunction ;-)

also:
<a4j:commandButton value="clickMe" data="#{demoManager.someMethod}" oncomplete="myJSFunction(data);"/>
Ergänzung ()

...................

ah, sehe gerade,dass du wohl mit jsf 2 arbeitest, welches eigene Ajax Funktionalität mitbringt.

http://jsfatwork.irian.at/book_de/a...c:ajax-js-api#!idx:/ajax.html:sec:ajax-js-api

http://jsfatwork.irian.at/book_de/ajax.html
HTML:
<commandButton id="newButton" value="submit"
    onclick="jsf.ajax.request(this,event,
      {execute:'newButton',render:'status',onevent: handleEvent,onerror: handleError});return false;"/>
</commandButton/>

http://www.developer.com/java/web/a.../Inside-JSF-20s-Ajax-and-HTTP-GET-Support.htm

handleEvent ist wohl wieder eine javascript funktion mit einem Parameter. Einfach mal ausprobieren.
 
Zuletzt bearbeitet:
Ich hab es jezt wie von abcb123 vorgeschlagen gemacht. jQuery und ein dazu gehörendes Servlet.
Danke für eure antworten :)
 
Zurück
Oben