#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>