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对象的范围,不是吗?
还有什么名字?它是sharedResourceKey吗?如果没有,resourceKey来自哪里?它是如何产生的,为什么不是它的名字?或者名称在类路径上查找,并且神奇地加载(假设在类路径中只有一个具有该名称的文件;如果有多个会发生什么?)?如果它确实加载了具有该名称的文件,为什么不在Javadoc中这样说呢?
你如何实际为这个ResourceReference分配一个物理资源?有一个getResource(),但它们似乎错过了setResource().如果你有webapp目录中的图像文件,你如何“附加”文件的引用,它的路径,甚至是文件内容的字节流?如果有一种方法可以在webapp中读取资源,这可能很有用,但你不能;它只在类路径中.
我希望能够“挂载”webapp / games / someGame.swf的内容,以便Wicket页面可以访问webapp中的SWF,或者只是对它们进行某种处理.
解决方法
ResourceReference本身只是对通过SharedResources可用资源的引用.您添加到SharedResources的任何类型的资源(通常在您的Application#init()中完成)都有您定义的名称.然后,任何使用资源的组件都可以通过具有该名称的ResourceReference引用此共享资源 – 因此该参数被称为“name”.在这种情况下,不需要scope参数(类).
这是一般情况,指的是任何类型的资源.
您和Andrew的示例中显示的案例是一个更特殊的情况:您的ResourceReference的名称不是指之前添加到SharedResources的资源.这里一个所谓的PackageResource被懒惰地初始化并添加到SharedResources.
PackageResource实际上是整个“load-file-from-classpath”的东西.
因此,如果您只想从类路径中引用类似图像的文件,那么Andrew的示例只是一个非常有用的快捷方式,可以避免自己创建PackageResource.如上所述,ResourceReference不仅仅是:-)