我所看到的例子包含这样的事情:什么是Wicket中的ResourceReferences,它们是如何工作的?
mountSharedResource("/images/logo.gif", new ResourceReference(ImageScope.class,
"logo.gif").getSharedResourceKey());
mountSharedResource("/resource",
Application.class.getName() + "/" + resourceKey);
但Javadoc中说,这为构造函数:
ResourceReference(java.lang.Class<?> scope, java.lang.String name);
所以,当你创建一个ResourceReference
,你给它一个类。为什么?通常你会想要全局作用域或你创建的ResourceReference
对象的范围,不是?
另外,什么是name
?是sharedResourceKey
?如果不是,resourceKey
从哪里来?它是如何产生的,为什么不是它的名字?或者是name
在类路径中查找,然后神奇地加载(假设在类路径中只有一个文件具有该名称;如果有多个,会发生什么?)?如果它确实加载了一个具有该名称的文件,为什么不在Javadoc中这么说呢?
你怎么真的把物理资源分配给这个ResourceReference
?有一个getResource()
,但他们似乎错过了setResource()
。如果你在你的目录中有一个图像文件,你如何“附加”引用文件,它的路径,甚至是文件内容的字节流?如果有一种方法可以读取webapp中的资源,这可能是有用的,但是你不能;它只在类路径中。
我希望能够“挂载”webapp/games/someGame.swf
的内容,以便webkit中的SWF可以通过Wicket页面访问,或者只是获取某种类型的句柄。
这样做很有意义,谢谢!那么参数名称是不正确的:它应该被称为“路径”或“文件名”。如果路径相对于类的位置(推测是/ com/something/package),那么如何引用webapp中的文件,这是他们始终保存的位置(无论如何)。这是关键 - 我们想要在webapp的游戏目录中处理swf文件,并且没有找到任何方法来完成此操作:因此,对ResourceReference最初的兴趣。 – wingnut
正确,'name'是相对于'范围'(类)位置的路径。这由类包名决定,它在物理上位于文件系统上。 name参数不支持使用'../ ..'表示法进一步向上浏览目录树的聪明事情。所以你的资源必须是相对于类文件的位置。 顺便说一句,我真的建议抓住我提到的那本书,这很好。 –
注意[ResourceReference](http://www.jarvana.com/jarvana/view/org/apache/wicket/wicket/1.5-M1/wicket-1.5-M1-javadoc.jar!/org/apache/wicket/request /resource/ResourceReference.html)是一个抽象类,不能实例化。 – TOUDIdel