我看过包含以下内容的示例:
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
目录中有一个图像文件,您如何“附加”对该文件的引用,其路径,甚至文件内容的字节流?如果有一种方法可以读取Web应用程序中的资源,则该方法可能很有用,但您不能这样做。它仅在类路径中。我希望能够“挂载”
webapp/games/someGame.swf
的内容,以便Wicket页面可以访问Web应用程序中的SWF,或者只是对它们进行某种处理。 最佳答案
扩展安德鲁的答案:ResourceReference
本身就是对可通过SharedResources
获得的资源的引用。您添加到Resource
中的任何一种SharedResources
(通常在Application#init()
中完成)都具有您定义的名称。然后,任何使用资源的Component
都可以通过具有该名称的ResourceReference
引用此共享资源-因此该参数称为“名称”。在这种情况下,不需要范围参数(类)。
这是一般情况,指的是任何类型的资源。
您和Andrew的示例中显示的情况是一个更特殊的情况:ResourceReference
的name
不引用先前添加到Resource
中的SharedResources
。在这里,所谓的PackageResource
会被延迟初始化并添加到SharedResources
中。PackageResource
实际上是整个“从类路径加载文件”的工作。
因此,如果您只想引用类路径中的图像之类的文件,那么Andrew的示例就是避免自己创建PackageResource
的非常有用的快捷方式。如上所述,ResourceReference
不仅有其他功能:-)