When I use
or
This is possible. The code on FacesServlet looks like this:
ResourceHandler resourceHandler = facesContext.getApplication().getResourceHandler();
// Call ResourceHandler.isResourceRequest(javax.faces.context.FacesContext).
if (resourceHandler.isResourceRequest(facesContext))
{
// If this returns true call ResourceHandler.handleResourceRequest(javax.faces.context.FacesContext).
resourceHandler.handleResourceRequest(facesContext);
}
The default implementation uses ResourceHandler#RESOURCE_IDENTIFIER constant by default, but it is technically possible to write a ResourceHandlerWrapper that uses other structure. The only problem is the wrapper should implement everything, and you can't delegate anything to the default algorithm. You can reuse the code on MyFaces Shared but remember this are internals, so use something like maven shade plugin or a hard copy to relocate the package name.
What is not possible is change it for existing ResourceHandler implementations (for example, components that use a custom ResourceHandler implementation like t:captcha or other variants), because all those are tied to the constant.
Anyway, I created MFCOMMONS-36 to add this to the extended ResourceHandler implementation that is being added on MyFaces Commons.
That's not directly possible without reimplementing the entire ResourceHandler with help of a ResourceHandlerWrapper as answered by lu4242 on this question, which is not exactly a trivial job. It's a hardcoded public static final
field constant in ResourceHandler class, the ResourceHandler#RESOURCE_IDENTIFIER. You may want to post a feature request to make this externally configureable like as has happened for the NamingContainer separator character during the JSF 1.2 to JSF 2.0 step.
But why would you do this? There are a lot of other things which gives enough hints about the framework used. In case of JSF that can be the request URL pattern (/faces/*
, *.jsf
or *.xhtml
), the response headers (X-Powered-By
), specific hidden form fields (javax.faces.ViewState
), the autogenerated client IDs (by default woodstocked), the JS libraries used (jsf.js
), etcetera.