}
public String calculateResourceBasePath(FacesContext facesContext)
{
FacesServletMapping mapping = getFacesServletMapping(facesContext);
ExternalContext externalContext = facesContext.getExternalContext();
if (mapping != null)
{
String resourceBasePath = null;
if (mapping.isExtensionMapping())
{
// Mapping using a suffix. In this case we have to strip
// the suffix. If we have a url like:
// http://localhost:8080/testjsf20/javax.faces.resource/imagen.jpg.jsf?ln=dojo
//
// The servlet path is /javax.faces.resource/imagen.jpg.jsf
//
// For obtain the resource name we have to remove the .jsf suffix and
// the prefix ResourceHandler.RESOURCE_IDENTIFIER
resourceBasePath = externalContext.getRequestServletPath();
int stripPoint = resourceBasePath.lastIndexOf('.');
if (stripPoint > 0)
{
resourceBasePath = resourceBasePath.substring(0, stripPoint);
}
}
else
{
// Mapping using prefix. In this case we have to strip
// the prefix used for mapping. If we have a url like:
// http://localhost:8080/testjsf20/faces/javax.faces.resource/imagen.jpg?ln=dojo
//
// The servlet path is /faces
// and the path info is /javax.faces.resource/imagen.jpg
//
// For obtain the resource name we have to remove the /faces prefix and
// then the prefix ResourceHandler.RESOURCE_IDENTIFIER
resourceBasePath = externalContext.getRequestPathInfo();
}
return resourceBasePath;
}
else
{
//If no mapping is detected, just return the
//information follows the servlet path but before
//the query string
return externalContext.getRequestPathInfo();
}
}