Aufrufen einer p:remoteCommand über eine JavaScript-Funktion übergeben Sie eine Nachricht local, die Funktion in eine andere Funktion, die durch die "oncomplete" - handler
Diese Frage ist rein auf diese zuvor gestellte Frage (mit freundlicher Genehmigung) aber die Frage ist komplett Durcheinander mit den Java-EE-7 WebSockets-API versucht zu zeigen, die tatsächlichen praktischen Ansatz/Szenario ist nun sehr unwahrscheinlich zu erhalten, beantworten Sie die Fragen auf <p:remoteCommand>
.
Da unten ein snippet des JavaScript (dies ist nur ein test-Szenario).
<script type="text/javascript">
function test() {
var message = "myMessage";
window["myFunction"]();
//This is literally interpreted as a JavaScript function "myFunction()".
//"myFunction()" in turn is associated with a <p:remoteCommand>.
}
$(document).ready(test);
function notifyAll() {
alert("notifyAll() invoked.");
}
</script>
Den test()
Funktion wird aufgerufen, sobald die Seite geladen wird, die bewirkt, dass die folgenden <p:remoteCommand>
auslösen, die wiederum ruft eine weitere JavaScript-Funktion, nämlich notifyAll()
mit einem oncomplete
- handler, der einfach Warnungen die besagte Meldung.
<h:form>
<p:remoteCommand process="@this"
name="myFunction"
actionListener="#{bean.listener}"
oncomplete="notifyAll()"
ignoreAutoUpdate="true"/>
</h:form>
Davon ausgehen, dass die lokalen JavaScript-variable message
innerhalb der test()
Funktion zugewiesen ist, eine JSON-Nachricht, die asynchron empfangen durch eine WebSockets-Kanal.
Der notifyAll()
Funktion wiederum sendet dann eine Benachrichtigung (myMessage
lokalen test()
Funktion - eigentlich eine JSON-Nachricht, die empfangen wird, die zuvor in der test()
- Funktion) zu einem anderen WebSockets-Kanal, wird völlig ignoriert in dieser Frage für die Kürze.
Ist es möglich, übergeben Sie den Wert der var message = "myMessage"
lokalen test()
Funktion zu einer anderen Funktion notifyAll()
durch die oncomplete
handler der gegebenen <p:remoteCommand>
?
Deklarieren message
als eine Globale JavaScript-variable kann überwältigen die Funktionalität von WebSockets als die Nachricht empfangen wird asynchron d.h. eine neue Nachricht empfangen werden kann, während die Verarbeitung von <p:remoteCommand>
ist immer noch auf/warten auf vollständige. So deklarieren message
als eine Globale JavaScript-variable ist keine option.
.
InformationsquelleAutor Tiny | 2015-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht zu sehen, einen besseren Weg, als übergeben Sie es als parameter in den
<p:remoteCommand>
- Funktion und dieoncomplete
Funktion extrahieren.Den
data
argument ist bereits injiziert, die in der JS-Funktion Umfang vononcomplete
und stellt die XHR-query-string. Die regex extrahiert die parameter aus. Beachten Sie, dass der reguläre Ausdruck setzt Voraus, dass die parameter nie in den Anfang der Abfrage-string, die wahr ist, wie es beginnt immer mit JSF/PF-spezifischen Parameter, so kann es einfach gehalten werden (JS regex ist schwierig, mit negativen lookbehind).data
aus? Ich bin immerundefined
.Sorry, ich vergaß die
<p:remoteCommand>
- bit in der Antwort.Empfangen
Uncaught ReferenceError: data is not defined
. Das generierte Skript sieht wie folgt aus :<script>myFunction = function() {PrimeFaces.ab({s:"j_idt5:j_idt6",f:"j_idt5",p:"j_idt5:j_idt6",iau:true,onco:function(xhr,status,args){notifyAll(data);},pa:arguments[0]});}</script>
.Sorry, Sie sollten pass in
this.data
.InformationsquelleAutor BalusC