ページが読み込まれた後にJavaScript関数を実行したいと思います。現時点ではcommandButtonがあり、すべて正常に動作します。ただし、ユーザーがボタンを押す必要がない場合は、より快適になります。
F:eventを試しましたが、リスナーがなく、JavaScript関数しかありません。さらに、高レベルのコンポーネントのみを使用しているため、ボディオンロードは機能しません。
<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>
JavaScript関数PathFinder.findAndGoは私のmaster.xhtmlで定義されています
次のようにJQueryを使用します。
<script>
jQuery(document).ready(function() {
PathFinder.findAndGo();
});
</script>
更新:
<ui:define name="content">
内にある必要があります。
Primefacesでページをロードした後にJS関数を実行したい場合、2つの方法があります。
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
}
プライムフェイスの場合、私は以下をうまく使用できました。
以下を使用して、onLoadに必要な関数を含むJSファイルを<head>
にロードしました。
< h:outputScript library="javascript" name="nameOfMyFile.js" target="head">
「nameOfMyFile.js」から必要なJS関数を実行するために、以下を使用しました。
< h:body onload="nameOfMyFunction()" >
私のjsファイルには、下部に次のコマンドも含まれていることに注意してください。
$(document).ready(nameOfMyFunction());
3番目のポイントは、関数onReady
を実行することです。これはすべて、スケジュールイベントにHTMLを追加できるかどうかを確認するための実験でした...渡された文字列が解析され、htmlタグがエスケープされるためです。なぜonReady
とonLoad
....の両方が必要なのかはまだわかりませんが、現時点では、それが唯一の方法です。新しいものが見つかったら更新します。成功しました。
OndrejMremoteCommandの2番目のオプションを使用しますが、outputPanelの内部で、ページのロード後にdeferred="true"
とdeferredMode="load"
を追加してロードするように設定します。
<p:outputPanel deferred="true" deferredMode="load" rendered="#{...}">
<p:remoteCommand oncomplete="PathFinder.findAndGo();" autoRun="true" />
</p:outputPanel>
(ページの下部に)jQueryライブラリを_<ui:define name="content">
_内に含め、通常どおり$(document).ready
を使用します。
_<ui:define name="content">
...
<!-- jQuery -->
<h:outputScript name="vendor/jquery/jquery.min.js"/>
<script>
$(document).ready(function(){
alert(1);
});
</script>
</ui:define>
_