设置如下:
- Web应用的文件夹结构和文件名与UnmappedResourceHandler的javadoc完全相同
- UnmappedResourceHandler已经在
faces-config.xml
中注册 -
/javax.faces.resource/*
已经映射到web.xml
中的facesServlet
style.css
为:
body {
background: url("image/background.png");
}
body .test{
background-image: url("#{resource['css:image/background.png']}");
}
然后我请求http://localhost:8080/app/javax.faces.resource/style.css?ln=css
,响应是:
body {
background: url("image/background.png");
}
body .test{
background-image: url("/app/javax.faces.resource/image/background.png?ln=css");
}
我希望CSS中的所有相对URL都像#{resource}
那样被转换为JSF的有效URL,这样我就不必再使用#{resource}
来引用CSS中的相对URL了,但是body
选择器的background
的相对URL仍然保持不变。
更新BalusC的回复:
如果使用资源库,添加
?ln=libraryname
到所有CSS图像将工作!如果没有使用资源库,
<h:outputStylesheet name="css/style.css" />
生成<link rel="stylesheet" media="screen" type="text/css" href="/app/javax.faces.resource/css/style.css.xhtml">
如果我理解正确的话,使用UnmappedResourceHandler和映射
web.xml
中的/javax.faces.resource/*
到facesServlet
应该导致JSF生成没有xhtml
扩展的style.css
的链接。
您正在使用css
作为资源库,如:
<h:outputStylesheet library="css" name="style.css" />
这是不对的。它只是一个文件夹:
<h:outputStylesheet name="css/style.css" />
这将生成/javax.faces.resource/css/style.css
URL而不是/javax.faces.resource/style.css?ln=css
。否则你还需要在图像URL中指定它:
background: url("image/background.png?ln=css");
我将更新javadoc以澄清更多。
参见:
- JSF资源库是用来做什么的?应该如何使用它?