加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:20:15 所属栏目:Java 来源:网络整理
导读:我看过包含这样的事情的例子: mountSharedResource("/images/logo.gif",new ResourceReference(ImageScope.class,"logo.gif").getSharedResourceKey());mountSharedResource("/resource",Application.class.getName() + "/" + resourceKey); 但是Javadoc为
我看过包含这样的事情的例子:
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不仅仅是:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读