Flex swf オブジェクトを埋め込む必要がある JSF アプリケーションに取り組んでいますが、うまく実行できませんでした。私が今やっているのは、クリックイベントでJavaScript関数を実行するPrimefaces commandButtonを使用することです:
私が使用しているコードは次のとおりです。
<ui:define name="contentPreview">
<div style="width: 100%;height: 400px;border: 1px solid;">
<p:commandButton value="Vista Previa Tour"
process="@this"
onclick="loadFlexVirtualTour();"
style="float:left;"/>
<h:panelGroup layout="block" id="flashContent" rendered="true">
<p>
To view this page ensure that Adobe Flash Player version
11.1.0 or greater is installed.
</p>
</h:panelGroup>
</div>
</ui:define>
そして、swf オブジェクトをロードするために使用されるスクリプト:
<script type="text/javascript">
function loadFlexVirtualTour(){
alert(UrlExists("virtualTour.swf"))
// For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
var swfVersionStr = "10.0.0";
// To use express install, set to playerProductInstall.swf, otherwise the empty string.
swfobject.embedSWF("virtualTour.swf", "flashContent", "400", "400", swfVersionStr);
// JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
}
function UrlExists(url)
{
var http = new XMLHttpRequest();
http.open('HEAD', url, false);
http.send();
return http.status!=404;
}
</script>
UrlExists は、指定された URL にリソースが存在するかどうかを確認する関数でした。この場合、virtualTour.swf が jsf ページと同じディレクトリにあるかどうかを確認しています。
画面にアラートが表示され、URLExists 関数でさえ true を返すため、関数は正しく実行されます。ただし、アプリケーションはロードされません。私が間違っていること...
PD: タグは html 要素を生成するだけです。特にこの場合、レンダリング html は次のようになります。
<button id="j_idt43" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" type="submit" style="float:left;" onclick="loadFlexVirtualTour();;PrimeFaces.ab({formId:'j_idt8',source:'j_idt43',process:'j_idt43'});return false;" name="j_idt43" role="button" aria-disabled="false">