I am using primefaces for some of my pages in my JSF2 app. I would like to control where the page gets the jquery.js from. Is there a way to specify in the faces-config or web.xml to not add the JQuery javascript libraries.
For example don't add:
<script type="text/javascript" src="/myappcontextroot/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces"></script>
I would prefer the page output something like:
<script type="text/javascript" src="http://mydomain.com/jquery/jquery.js"></script>
Or not do output anything when needed the jquery library. (I will manually add the above to the page.)
Is this even possible? If so, how?
You basically need a custom resource handler which returns the desired external URL on Resource#getRequestPath()
whenever the resource primefaces:jquery/jquery.js
is been requested.
E.g.
public class CDNResourceHandler extends ResourceHandlerWrapper {
private ResourceHandler wrapped;
public CDNResourceHandler(ResourceHandler wrapped) {
this.wrapped = wrapped;
}
@Override
public Resource createResource(final String resourceName, final String libraryName) {
final Resource resource = super.createResource(resourceName, libraryName);
if (resource == null || !"primefaces".equals(libraryName) || !"jquery/jquery.js".equals(resourceName)) {
return resource;
}
return new ResourceWrapper() {
@Override
public String getRequestPath() {
return "http://mydomain.com/jquery/jquery.js";
}
@Override
public Resource getWrapped() {
return resource;
}
};
}
@Override
public ResourceHandler getWrapped() {
return wrapped;
}
}
To get it to run, map it in faces-config.xml
as follows:
<application>
<resource-handler>com.example.CDNResourceHandler</resource-handler>
</application>
The JSF utility library OmniFaces offers a reusable solution in flavor of CDNResourceHandler
which is in your case to be configured as
<context-param>
<param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name>
<param-value>primefaces:jquery/jquery.js=http://mydomain.com/jquery/jquery.js</param-value>
</context-param>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With