blob: 550dabe2fe678f3af71772ced12e2f053ea432b9 [file] [log] [blame]
Resources can be added to a global registry in order to share them at application-level. Shared resources are identified by an application-scoped key and they can be easily retrieved at a later time using reference class @SharedResourceReference@. The global registry can be accessed with @Application@'s method @getSharedResources@. In the following excerpt of code (taken again from project @CustomResourceMounting@) we register an instance of our custom RSS feeds producer as application-shared resource:
{code}
//init application's method
@Override
public void init(){
RSSProducerResource rssResource = new RSSProducerResource();
// ...
getSharedResources().add("globalRSSProducer", rssResource);
}
{code}
Now to use an application-shared resource we can simply retrieve it using class @SharedResourceReference@ and providing the key previously used to register the resource:
{code}
add(new ResourceLink("globalRssLink", new SharedResourceReference("globalRSSProducer")));
{code}
The URL generated for application shared resources follows the same pattern seen for package resources:
@./wicket/resource/org.apache.wicket.Application/globalRSSProducer@
The last segment of the URL is the key of the resource while the previous segment contains the scope of the resource. For application-scoped resources the scope is always the fully qualified name of class @Application@. This should not be surprising since global resources are visible at application level (i.e. the scope is the application).
{note}
Package resources are also application-shared resources but they don't need to be explicitly registered.
{note}
{note}
Remember that we can get the URL of a resource reference using method @urlFor(ResourceReference resourceRef, PageParameters params )@ available with both class @RequestCycle@ and class @Component@.
{note}