java – Wicket中的ResourceReferences是什么,它们如何工作?

前端之家收集整理的这篇文章主要介绍了java – 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对象的范围,不是吗?

还有什么名字?它是sharedResourceKey吗?如果没有,resourceKey来自哪里?它是如何产生的,为什么不是它的名字?或者名称在类路径上查找,并且神奇地加载(假设在类路径中只有一个具有该名称文件;如果有多个会发生什么?)?如果它确实加载了具有该名称文件,为什么不在Javadoc中这样说呢?

你如何实际为这个ResourceReference分配一个物理资源?有一个getResource(),但它们似乎错过了setResource().如果你有webapp目录中的图像文件,你如何“附加”文件的引用,它的路径,甚至是文件内容的字节流?如果有一种方法可以在webapp中读取资源,这可能很有用,但你不能;它只在类路径中.

我希望能够“挂载”webapp / games / someGame.swf的内容,以便Wicket页面可以访问webapp中的SWF,或者只是对它们进行某种处理.

解决方法

扩展Andrew的答案:

ResourceReference本身只是对通过SharedResources可用资源的引用.您添加到SharedResources的任何类型的资源(通常在您的Application#init()中完成)都有您定义的名称.然后,任何使用资源的组件都可以通过具有该名称的ResourceReference引用此共享资源 – 因此该参数被称为“name”.在这种情况下,不需要scope参数(类).

这是一般情况,指的是任何类型的资源.

您和Andrew的示例中显示的案例是一个更特殊的情况:您的ResourceReference的名称不是指之前添加到SharedResources的资源.这里一个所谓的PackageResource被懒惰地初始化并添加到SharedResources.

PackageResource实际上是整个“load-file-from-classpath”的东西.

因此,如果您只想从类路径中引用类似图像的文件,那么Andrew的示例只是一个非常有用的快捷方式,可以避免自己创建PackageResource.如上所述,ResourceReference不仅仅是:-)

猜你在找的Java相关文章