Grails и swf-приложения

#grails #resources #flash #resourcebundle

#grails #Ресурсы #flash #resourcebundle

Вопрос:

Я хочу запустить флэш-приложение из grails 2.3.1.

У меня проблема с загрузкой зависимостей моего swf-файла из gsp.

Во-первых, я попытался поместить все необходимые файлы в папку моего веб-приложения, и это сработало как шарм :

  • wab-приложение
    • css
    • flash
      • index.html // <- Использовать для моего первого теста.
      • flash.swf
      • prefs.xml
      • данные-флэш-папка
        • папка с видео
        • txt-папка
        • xml-папка
        • введение.swf
        • main.swf
        • prefs.xml
        • static.xml

Когда я перехожу к этому URL : http://localhost:8080/application-name/flash/index.html , все работает как шарм.

Поэтому я решил вызвать его из контроллера :

 class FrontFlashController {
    def openFlash() {
    }
}
  

Вот мой gsp, вызывающий flash :

 <g:applyLayout name="frontFlash">
        <div id="flash-render">
                <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1000" height="700" title="myFlash" >
                    <param name="movie" value="flash/flash.swf" />
                    <param name="FLASHVARS" value="idSession=rffcu96vn6j4tq3o56j1bgn5o7amp;lang=framp;xmlPath=prefs.xml">
                    <param name="quality" value="high" />
                    <embed src="/application-name/flash/flash.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="1000" height="700" flashvars="idSession=rffcu96vn6j4tq3o56j1bgn5o7amp;module=moduleamp;maxchapter=6amp;gochapter=3amp;jeu=0amp;cumul=285"></embed>
                </object>
        </div>
</g:applyLayout>
  

При вызове действия по этому URL: http://localhost:8080/application-name/frontFlash/openFlash мой файл ‘flash.swf’ загружается правильно, но ни одна из его зависимостей.

Вот мой стек firebug :

 "NetworkError: 404 Not Found - http://localhost:8080/application-name/frontFlash/data-folder/static.xml"
"NetworkError: 404 Not Found - http://localhost:8080/application-name/frontFlash/data-folder/textes/default_en.xml"
"NetworkError: 404 Not Found - http://localhost:8080/application-name/frontFlash/data-folder/prefs.xml"
"NetworkError: 404 Not Found - http://localhost:8080/application-name/frontFlash/data-folder/intro.swf"
"NetworkError: 404 Not Found - http://localhost:8080/application-name/frontFlash/data-folder/main.swf"
  

Кажется, grails смотрит прямо в мою папку, а не в папку с файлами swf.

Как я могу это исправить?

Более того, позже я захочу связать swf-ресурсы за пределами моего приложения grails, как я могу это сделать?

Snite

Ответ №1:

Попробуйте использовать g.createLinkTo в src , например

 <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" title="myFlash" >
    <param name="movie" value="flash/flash.swf" />
    <param name="FLASHVARS" value="idSession=rffcu96vn6j4tq3o56j1bgn5o7amp;lang=framp;xmlPath=prefs.xml">
    <param name="quality" value="high" />
    <embed src="${g.createLinkTo(dir: 'flash', file: 'flash.swf')}" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" flashvars="idSession=rffcu96vn6j4tq3o56j1bgn5o7amp;module=moduleamp;maxchapter=6amp;gochapter=3amp;jeu=0amp;cumul=285"></embed>
</object>
  

Комментарии:

1. Ничего не изменилось :/

Ответ №2:

Я исправляю проблему, добавляя <base href="/application-name/flash/"> в свою голову.

Вот моя окончательная версия openFlash.gsp:

 <!DOCTYPE html>
<html lang="en-US">
    <head>
        <title>FLASH</title>
        <base href="/application-name/flash/">
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
        swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");
        </script>
    </head>
    <body>
        <div>
            <g:if test="${flash}">
                <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1000" height="700" title="Module">
                    <param name="movie" value="flash.swf" />
                    <param name="FLASHVARS" value="idSession=rffcu96vn6j4tq3o56j1bgn5o7amp;lang=framp;xmlPath=prefs.xml">
                    <param name="quality" value="high" />
                    <embed src="${g.createLinkTo(dir: 'flash', file: 'flash.swf')}" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="1000" height="700" flashvars="idSession=rffcu96vn6j4tq3o56j1bgn5o7amp;maxchapitre=6amp;gochapitre=3amp;jeu=0amp;cumul=285"></embed>
                </object>
            </g:if>
            <g:else>
                <g:if test="${flash.error}">
                    <br />
                    <div class="alert alert-error">${flash.error}</div>
                </g:if>
            </g:else>
        </div>
    </body>
</html>