1

我有一个典型的 JSF 项目设置:

myproject
  |-- src/main/webapps
  |    |-- resources
  |    |    |-- css
  |    |    |     |-- 3rdparty.css
  |    |    |      
  |    |    |-- fonts  
  |    |         |    
  |    |         |-- myspecialfont.woff
  |    |         

然后在我的 JSF html 中:

 <h:outputStylesheet name="3rdparty.css" library="css"/>

这很好用,因为如果我需要升级,我可以保持目录一致。

但是,在这种情况下,3rdparty.css 文件包含一个相对引用:

@font-face {
  font-family: 'Lato';
  src: url('../fonts/myspecialfont.woff');
}

由于 h:outputStylesheet 构造了要使用的 URI,mywebapp/javax.faces.resource/3rdparty.css这将破坏其中的相对引用,因为该路径现在将引用mywebapp/fonts/myspecialfont.woff.

有没有一种好方法可以让 JSF 引用的这些本地托管的 3rd 方库来处理这种相对引用,而无需手动更改 CSS?

4

1 回答 1

3

你有两个选择:

  1. 不要使用 outputStyleSheet 而是直接将其包含在您的模板中
  2. 修改 CSS 文件内容(如 TemarV 建议的那样)

不幸的是,没有什么可以做的,因为资源是使用不同的路径呈现的,其中库和资源引用被指定为 URL 参数,而不是 URL 的一部分。

编辑:我还想强调第三个选项 - 编写自定义 ResourceHandler。我必须在这些方面做点什么。你可以阅读更多关于它的信息——

http://roguexz.blogspot.in/2013/10/jsf-2-returning-resource-url-that-is.html

于 2013-10-09T13:07:40.727 回答