Anruf ajax in jsf 2.0 (myfaces), der onevent-Javascript-Funktion in der ajax-tag wird aufgerufen, bevor das rendering abgeschlossen ist

Dies ist mein erstes mal, eine Frage in einem forum, da in der Regel meine Fragen wurden bereits gestellt und beantwortet werden. Ich habe nicht gefunden, eine Antwort auf dieses problem, das funktioniert für mich, so hier geht:

Mache ich einen Anruf Ajax in JSF 2.0 wie diese:

< f :ajax listener="#{myReferenceController.clearRequiredReferenceNumber}"
    onevent="resetFocus" execute="@form"
    render=":resultsForm:ResultsDisplay" />

Alles in der listener funktioniert perfekt, und die Daten dann gerendert, wie erwartet, in die Daten-Tabelle, die ich in meiner .xhtml-Seite. Das problem ist, dass das Javascript, das nenne ich in der onevent scheint immer aufgerufen, bevor das rendering abgeschlossen ist, und daher der Prozess der zurücksetzen des Fokus auf eine Spalte in meiner datatable funktioniert nicht, da die datatable entfernt und dann wieder Hinzugefügt, um den DOM, wenn Ajax fertig ist, re-rendering.

Ich bin auf der Suche in meinem Javascript für den status "Erfolg", in der Hoffnung, dass an dieser Stelle das rendering abgeschlossen haben. Ach, das ist nicht der Fall, und meine getElementById (eigentlich dojo.byId) ist nicht zu finden das element in der datatable. Ich weiß, dass meine Javascript-Funktion funktioniert unter normalen Umständen, da bin ich, ruft diese gleiche Funktion in einer situation, wo es nicht eine Ajax-Aufrufs, und alles funktioniert perfekt da.

Wenn ich könnte Sie nur vermeiden, das Rendern der Zelle in der Tabelle, die ich versuche zu setzen, dass wäre toll, aber mein Hörer ist, dass änderungen an dieser Zelle in der ajax-Aufruf. Ich bin mit meinem Latein am Ende, also irgendwelche Ideen auf diesem würde sehr geschätzt.

-- in Reaktion auf Balusc (gehört, gute Dinge über Sie, btw)

Hmm, ich war eigentlich auf dem richtigen Weg denke ich, aber scheinbar noch Probleme. Ich bin überprüfung auf "Erfolg" und noch viel Erfolg, bin nicht in der Lage, hier den Fokus.
Hier ist mein Javascript-Funktion, die Prüfung für "Erfolg": Diese Funktion arbeitet in einer anderen situation, wo es nicht angebracht ein Ajax-event.

function resetFocus(data) {
    var theRow = dojo.byId("resultsForm:selectedRow").value;               
    if (data.status == "success") {
        dojo.query('[widgetId]',dojo.byId('theResultsDataTable'))
            .forEach(function(node) {
                var widget = dijit.byNode(node);
                var theId = widget.attr("id")                                             
                if (theId.indexOf(':' + theRow + ':') != -1) {
                    if (theId.indexOf('theOrppoNum') != -1) {
                        widget.focus();
                        widget.attr("isFocused",true);
                    }
                }
            });
    }
}
  • Das sieht aus wie ein oncomplete javascript-Methode, die für Ihre ajax-request. Leider, diese Methode ist nicht in der JSF-Spezifikation (weitere Informationen hier). Alternativ können Sie PrimeFaces oder RichFaces, diese frameworks Griff diese oncomplete Methode für ajax-Anfragen.
  • Wenn diese oncomplete-Methode einfach behandelt das Attribut status, das den Ereignis-listener übergeben bekommt, ich glaube nicht, dass dies mir helfen wird. Auch der "Erfolg" - status scheint, wieder zu kommen, bevor der ajax und jsf ist fertig Rendern. Ich guck in den prime faces und richfaces Alleen obwohl.....
InformationsquelleAutor james | 2012-07-05
Schreibe einen Kommentar