win*_*nut 6 java wicket resourcereference
我看过包含这样的事情的例子:
mountSharedResource("/images/logo.gif", new ResourceReference(ImageScope.class,
"logo.gif").getSharedResourceKey());
mountSharedResource("/resource",
Application.class.getName() + "/" + resourceKey);
Run Code Online (Sandbox Code Playgroud)
但是Javadoc为构造函数说了这个:
ResourceReference(java.lang.Class<?> scope, java.lang.String name);
Run Code Online (Sandbox Code Playgroud)
因此,当您创建一个时ResourceReference
,就会给它一个类.为什么?通常你会想要全局范围或ResourceReference
刚刚创建的对象的范围,不是吗?
还有,是什么name
?是sharedResourceKey
吗?如果没有,它resourceKey
来自哪里?它是如何产生的,为什么不是它的名字?或者name
在类路径上查找并神奇地加载(假设在类路径中只有一个具有该名称的文件;如果有多个会发生什么?)?如果它确实加载了具有该名称的文件,为什么不在Javadoc中这样说呢?
你如何实际为此分配一个物理资源ResourceReference
?有一个getResource()
,但他们似乎错过了setResource()
.如果你的目录中有一个图像文件,你webapp
如何"附加"对文件的引用,它的路径,甚至是文件内容的字节流?如果有一种方法可以在webapp中读取资源,这可能很有用,但你不能; 它只在类路径中.
我希望能够"挂载"内容,比如说,webapp/games/someGame.swf
以便Wicket页面可以访问webapp中的SWF,或者只是对它们进行某种处理.
And*_*den 10
诸如图像的资源通常与特定网页相关联.因此,将该图像放在与Java和HTML文件相同的位置是有意义的.
class参数用作查找资源的基础.ResourceReference构造函数的第二个参数是资源的名称,相对于包含该类的目录.
所以例如你可以 -
new ResourceReference(AClass.class, "sub/directory/image.jpg");
Run Code Online (Sandbox Code Playgroud)
在部署应用程序时,只需将该资源放在正确的目录中即可分配物理资源.
在"Wicket in Action"一书中有一章使用资源.
扩展安德鲁的答案:
AResourceReference
本身只不过是对通过 可用的资源的引用SharedResources
。Resource
您添加的任何类型SharedResources
(通常在您的 中完成Application#init()
)都有您定义的名称。然后,任何Component
使用资源的人都可以通过具有该名称的参数引用该共享资源ResourceReference
- 因此该参数被称为“名称”。在这种情况下,不需要范围参数(类)。
这是一般情况,指的是任何类型的资源。
您和安德鲁的示例中显示的情况是一种更特殊的情况:您ResourceReference
的name
不是指Resource
先前添加到 的SharedResources
. 这里所谓的PackageResource
被延迟初始化并添加到SharedResources
.
PackageResource
这实际上是整个“从类路径加载文件”的事情。
因此,如果您只想引用类路径中的图像等文件,安德鲁的示例只是一个非常有用的快捷方式,可以避免您PackageResource
自己创建该文件。如上所述,不仅仅是ResourceReference
这些:-)
归档时间: |
|
查看次数: |
8330 次 |
最近记录: |