我见过包含以下内容的示例:
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中的资源,那么这可能会很有用,但您不能这样做;它只在类路径中。
我希望能够“挂载”webapp/games/someGame.swf的内容,这样webapp中的SWF就可以被Wicket页面访问,或者只是获得某种类型的句柄。
发布于 2011-08-11 19:51:39
在安德鲁的回答基础上进行扩展:
ResourceReference本身只不过是对通过SharedResources可用的资源的引用。您添加到SharedResources中的任何类型的Resource (通常在Application#init()中完成)都有一个您定义的名称。然后,任何使用资源的名称都可以通过具有该名称的名称来引用此共享资源-因此该参数被称为“Component”。在这种情况下,不需要作用域参数(类)。
这是一般情况,指的是任何类型的资源。
在你和安德鲁的例子中显示的情况是一个更特殊的情况:你的ResourceReference的name没有引用之前添加到SharedResources中的Resource,这里所谓的PackageResource被懒惰地初始化并添加到SharedResources中。
PackageResource实际上是执行所有“从类路径加载文件”的东西。
因此,如果您只想引用类路径中的图像之类的文件,那么Andrew的示例是避免自己创建PackageResource的一个非常有用的捷径。如上所述,ResourceReference还有更多的功能:-)
发布于 2011-07-14 16:36:25
诸如图像的资源通常与特定网页相关联。因此,将该图像放在与Java和HTML文件相同的位置是有意义的。
class参数用作查找资源的基础。ResourceReference构造函数的第二个参数是相对于包含类的目录的资源的名称。
举个例子,你可以-
new ResourceReference(AClass.class, "sub/directory/image.jpg");在部署应用程序时,只需将资源放在正确的目录中,即可分配物理资源。
在"Wicket in Action“一书中有一章是关于使用资源的。
https://stackoverflow.com/questions/6685608
复制相似问题