1

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">
4

0 に答える 0