使用Wicket动态添加SWFObject

时间:2011-02-01 05:53:47

标签: java flash wicket

我正在尝试将Flash(* .swf)文件添加到我的Wicket应用程序中。我找到了一些信息here,但不幸的是它没有用,我不知道为什么。在网页上,元素和标签

<object wicket:id="swf" data="resources/test.swf" width="700" height="70" style="float: right; margin: 15px 0 0 0;"></object>

渲染为

<object height="70" style="float: right; margin: 15px 0 0 0;" width="140" data="../../resources/wicketapp.ViewPanel/resources/test.swf" type="application/x-shockwave-flash"><param name="movie" value="../../resources/wicketapp.ViewPanel/resources/test.swf"> </object>

显然,这不是我的Flash文件的路径。另外,我想动态加载文件,但上面链接中讨论的嵌入Flash的方法是静态的。如何动态加载swf文件?

2 个答案:

答案 0 :(得分:1)

查看链接的实现,如果你想要一个绝对路径,你应该在它前面加斜杠:

// if it's an absolute path, return it:
if( src.startsWith( "/" ) || src.startsWith( "http://" ) || src.startsWith( "https://" ) )
  return(src);

否则会生成wicket资源路径。

我实际上建议使用swfobject来嵌入flash - 在this page的开头有一些不错的wicket集成代码,以及使用它的基于闪存的组件。

答案 1 :(得分:0)

正如我已经理解了您的问题,您希望在运行时更改swf文件。我已经解决了这个问题,如下所示(这是Scala代码,但我想你明白了):

class SWFObject(id: String) extends WebComponent(id)
with LoggerSupport {

  def script: String = """
        var swfVersionStr = "10.0.0";
        var xiSwfUrlStr = "flash/playerProductInstall.swf";
        var flashvars = {};
        var params = {};
        params.quality = "high";
        params.bgcolor = "#ebf4ff";
        params.allowscriptaccess = "sameDomain";
        params.allowfullscreen = "true";
        var attributes = {};
        attributes.align = "middle";
        swfobject.embedSWF(
                "${name}", "flashContent",
                "100%", "100%",
                swfVersionStr, xiSwfUrlStr,
                flashvars, params, attributes);
        swfobject.createCSS("#flashContent", "display:block;text-align:left;");
  """

  /**
   * Path to SWF file.
   */
  var swfFile: String = _;

  override def onComponentTag(tag: ComponentTag) = {
    checkComponentTag(tag, "script")
  }

  override def onComponentTagBody(markupStream: MarkupStream, openTag: ComponentTag) = {
    val relativeName = getRequestCycle()
      .getProcessor()
      .getRequestCodingStrategy()
      .rewriteStaticRelativeUrl(swfFile)


    val body = body.replace("${name}", relativeName)
    replaceComponentTagBody(markupStream, openTag, body)
  }
}

以下是使用示例:

  private val gameObject = new SWFObject("game");
  gameObject.swfFile = "flash/" + swfFile;

HTML使用swfobject脚本并基于标准的FlashBuilder导出。