我看过包含以下内容的示例:

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的示例中显示的情况是一个更特殊的情况:ResourceReferencename不引用先前添加到Resource中的SharedResources。在这里,所谓的PackageResource会被延迟初始化并添加到SharedResources中。
PackageResource实际上是整个“从类路径加载文件”的工作。

因此,如果您只想引用类路径中的图像之类的文件,那么Andrew的示例就是避免自己创建PackageResource的非常有用的快捷方式。如上所述,ResourceReference不仅有其他功能:-)

09-27 23:56