There is a workaround :
web.xml
<servlet>
<servlet-name>ResourceServlet</servlet-name>
<servlet-class>web.view.servlets.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResourceServlet</servlet-name>
<url-pattern>/rfRes/*</url-pattern>
<url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern>
</servlet-mapping>
public class ResourceServlet extends HttpServlet {
private static final long serialVersionUID = -5927803162904091362L;
private static final String[][] SUPPORTED_RESOURCES = {{".css", "text/css"},
{".js", "application/x-javascript"}
, {".ecss", "text/css"}};
private static final int EXTENSION_POSITION = 0;
private static final int CONTENT_TYPE_POSITION = 1;
@Override
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
String[] supportedResource = getSupportedResource(httpServletRequest);
if (supportedResource != null) {
String resourcePath = getResourcePath(httpServletRequest);
if (!StringUtils.isEmpty(resourcePath)) {
if (resourcePath.contains("rfRes"))
{
String library = httpServletRequest.getParameter("ln") == null ? "" : "/" + httpServletRequest.getParameter("ln");
resourcePath = "/META-INF/resources" + library + resourcePath.substring(resourcePath.indexOf("rfRes") + 5, resourcePath.length());
}
InputStream inputStream = ResourceServlet.class.getResourceAsStream(resourcePath);
if (inputStream != null) {
httpServletResponse.setContentType(supportedResource[CONTENT_TYPE_POSITION]);
String fileName = getFileName(resourcePath);
if (!StringUtils.isEmpty(fileName))
{
httpServletResponse.addHeader("Content-Disposition", String.format("filename=%s;", fileName));
}
ServletOutputStream outputStream = httpServletResponse.getOutputStream();
CoreUtils.copyStreamToStream(inputStream, outputStream);
return /* Success */;
}
}
}
/* Failure */
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
}
private String getResourcePath(HttpServletRequest httpServletRequest) {
if (StringUtils.areEqual(httpServletRequest.getServletPath(), httpServletRequest.getPathInfo()))
{
return httpServletRequest.getServletPath();
}
else
{
return httpServletRequest.getServletPath() + httpServletRequest.getPathInfo();
}
}
private String[] getSupportedResource(HttpServletRequest httpServletRequest) {
String pathInfo = httpServletRequest.getPathInfo();
if (!StringUtils.isEmpty(pathInfo)) {
for (String[] supportedResource : SUPPORTED_RESOURCES) {
if (pathInfo.endsWith(supportedResource[EXTENSION_POSITION]))
{
return supportedResource;
}
}
}
return null;
}
private String getFileName(String resource) {
if (!StringUtils.isEmpty(resource)) {
String[] tokens = resource.split("/");
if (tokens != null && tokens.length > 0)
{
return tokens[tokens.length - 1];
}
}
return null;
}
}
but this not help much, because the component styles are not even called. You can see that at the richfaces demo that is at http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=ajax&skin=blueSky <head> contains "/PackedCompressed/blueSky/packed/packed.css" which is a pack of the "ecss" files from richfaces-components-ui-4.1.xxx.jar/META-INF/resources/org.richfaces folder.
Any ideas for that problem ?
There is a workaround :
{".js", "application/x-javascript"}web.xml
<servlet>
<servlet-name>ResourceServlet</servlet-name>
<servlet-class>web.view.servlets.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResourceServlet</servlet-name>
<url-pattern>/rfRes/*</url-pattern>
<url-pattern>/css/*</url-pattern>
<url-pattern>/js/*</url-pattern>
</servlet-mapping>
public class ResourceServlet extends HttpServlet {
private static final long serialVersionUID = -5927803162904091362L;
private static final String[][] SUPPORTED_RESOURCES = {{".css", "text/css"},
, {".ecss", "text/css"}};
{ String library = httpServletRequest.getParameter("ln") == null ? "" : "/" + httpServletRequest.getParameter("ln"); resourcePath = "/META-INF/resources" + library + resourcePath.substring(resourcePath.indexOf("rfRes") + 5, resourcePath.length()); }private static final int EXTENSION_POSITION = 0;
private static final int CONTENT_TYPE_POSITION = 1;
@Override
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
String[] supportedResource = getSupportedResource(httpServletRequest);
if (supportedResource != null) {
String resourcePath = getResourcePath(httpServletRequest);
if (!StringUtils.isEmpty(resourcePath)) {
if (resourcePath.contains("rfRes"))
InputStream inputStream = ResourceServlet.class.getResourceAsStream(resourcePath);
{ httpServletResponse.addHeader("Content-Disposition", String.format("filename=%s;", fileName)); }if (inputStream != null) {
httpServletResponse.setContentType(supportedResource[CONTENT_TYPE_POSITION]);
String fileName = getFileName(resourcePath);
if (!StringUtils.isEmpty(fileName))
ServletOutputStream outputStream = httpServletResponse.getOutputStream();
{ return httpServletRequest.getServletPath(); }CoreUtils.copyStreamToStream(inputStream, outputStream);
return /* Success */;
}
}
}
/* Failure */
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
}
private String getResourcePath(HttpServletRequest httpServletRequest) {
if (StringUtils.areEqual(httpServletRequest.getServletPath(), httpServletRequest.getPathInfo()))
else
{ return httpServletRequest.getServletPath() + httpServletRequest.getPathInfo(); }}
{ return supportedResource; }private String[] getSupportedResource(HttpServletRequest httpServletRequest) {
String pathInfo = httpServletRequest.getPathInfo();
if (!StringUtils.isEmpty(pathInfo)) {
for (String[] supportedResource : SUPPORTED_RESOURCES) {
if (pathInfo.endsWith(supportedResource[EXTENSION_POSITION]))
}
{ return tokens[tokens.length - 1]; }}
return null;
}
private String getFileName(String resource) {
if (!StringUtils.isEmpty(resource)) {
String[] tokens = resource.split("/");
if (tokens != null && tokens.length > 0)
}
return null;
}
}
but this not help much, because the component styles are not even called. You can see that at the richfaces demo that is at http://showcase1104558964.prod.rhcloud.com/richfaces/component-sample.jsf?demo=ajax&skin=blueSky <head> contains "/PackedCompressed/blueSky/packed/packed.css" which is a pack of the "ecss" files from richfaces-components-ui-4.1.xxx.jar/META-INF/resources/org.richfaces folder.
Any ideas for that problem ?