Ich möchte eine JavaScript-Funktion ausführen, nachdem die Seite geladen wurde. Im Moment habe ich eine Befehlsschaltfläche und alles funktioniert gut. Es wäre jedoch angenehmer, wenn der Benutzer den Knopf nicht drücken soll.
Ich habe f: event ausprobiert, aber ich habe keinen Listener, ich habe nur die JavaScript-Funktion. Body Onload funktioniert für mich nicht, da ich nur Komponenten auf hohem Niveau verwende.
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://Java.Sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://Java.Sun.com/jsf/html"
xmlns:ui="http://Java.Sun.com/jsf/facelets"
xmlns:pm="http://primefaces.org/mobile" contentType="text/html">
<ui:composition template="/resources/master.xhtml">
<ui:define name="content">
<pm:content>
<h:inputHidden id="address" value="#{pathFinderBean.address}" />
<div id="map" style="width: 100%; height: 285px;"></div>
<p:commandButton type="button" value="Route" onclick="PathFinder.findAndGo()"/>
<div id="route"></div>
</pm:content>
</ui:define>
</ui:composition>
Die JavaScript-Funktion PathFinder.findAndGo ist in meiner master.xhtml definiert
Verwenden Sie JQuery wie folgt:
<script>
jQuery(document).ready(function() {
PathFinder.findAndGo();
});
</script>
Aktualisieren:
Es muss sich innerhalb von <ui:define name="content">
befinden.
Es gibt zwei Möglichkeiten, die für mich funktionieren, wenn ich nach dem Laden einer Seite in Primefaces eine JS-Funktion ausführen möchte:
jQuery(document).ready(function () { jQuery(document).ready(function () { // twice in document.ready to execute after Primefaces callbacks PathFinder.findAndGo(); }); });
<p:remoteCommand oncomplete=" PathFinder.findAndGo(); " autoRun="true"/>
window.onload = function () {
// code to execute here
}
Für Primefaces habe ich erfolgreich Folgendes verwendet:
Ich habe in <head>
die JS-Datei geladen, die die Funktionen enthält, die ich onLoad benötige.
< h:outputScript library="javascript" name="nameOfMyFile.js" target="head">
Ich habe Folgendes verwendet, um die von "nameOfMyFile.js" benötigten JS-Funktionen auszuführen:
< h:body onload="nameOfMyFunction()" >
Bitte beachten Sie, dass meine js-Datei unten den folgenden Befehl enthielt:
$(document).ready(nameOfMyFunction());
Der 3. Punkt ist für die Ausführung der Funktion onReady
. Dies war alles ein Experiment, um zu sehen, ob ich den Zeitplanereignissen HTML hinzufügen kann ... Wenn die übergebenen Zeichenfolgen dort analysiert werden, werden sie analysiert und HTML-Tags mit Escape-Zeichen versehen. Ich habe noch nicht herausgefunden, warum ich sowohl onReady
als auch onLoad
.... brauche, aber im Moment hat es für mich nur so funktioniert. Ich werde ein Update machen, wenn ich etwas Neues finde ... es war erfolgreich.
Verwenden der Option OndrejM second eines remoteCommand , jedoch innerhalb eines outputPanel , das so konfiguriert ist, dass es nach dem Laden der Seite durch Hinzufügen von deferred="true"
und deferredMode="load"
geladen wird:
<p:outputPanel deferred="true" deferredMode="load" rendered="#{...}">
<p:remoteCommand oncomplete="PathFinder.findAndGo();" autoRun="true" />
</p:outputPanel>
Fügen Sie (am Ende Ihrer Seite) jQuery library in Ihren <ui:define name="content">
ein und verwenden Sie $(document).ready
wie üblich:
<ui:define name="content">
...
<!-- jQuery -->
<h:outputScript name="vendor/jquery/jquery.min.js"/>
<script>
$(document).ready(function(){
alert(1);
});
</script>
</ui:define>