4

我正在使用 JSF 2.0 创建基于多语言Web 的应用程序。

对于我之前使用的 css

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

在我的 CSS 文件中

font-size: #{msg['myDir'].contains('LTR')?'10pt':'14pt'};
                                           ^^^     ^^^
                                          English Arabic

但是,由于 CSS 缓存,存在相同的 CSS 文件,即使我选择阿拉伯语,我也会连续获得 10pt 的字体。

因此我在 CSS 之后添加了时间。

<h:outputStylesheet library="css" name="setFontForAll.css?#{language.myTimeinMill}"/>

但是,当我使用它时,我所有的 CSS 都被折腾了……我看到了默认页面设置(没有调用任何 CSS)

当我看到查看源时,我得到<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND" />

知道我做错了什么吗?

注意:我使用的是 JSF 2.0


我也在#{language.myTimeinMill}体内打印,每次看到不同的时间。

4

2 回答 2

2

我看到的唯一方法是使用普通<link>标签。

<h:outputStylesheet />在 URL 中添加参数是不可能的。关于这个主题的一个答案在JSF 2.0 上不再适用:

<h:outputStylesheet target="head" name="blank.css">
    @import url('css/setFontForAll.css?version=#{language.myTimeinMill}')
</h:outputStylesheet>

它返回一条消息:

com.sun.faces.renderkit.html_basic.ScriptStyleBaseRenderer encodeChildren INFO:具有“name”属性和嵌套内容的 outputScript。忽略嵌套内容。

也就是说,我建议这个解决方案

<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/setFontForAll.css?ln=css&amp;version=#{language.myTimeinMill}" />

<ui:fragment rendered="#{msg['myDir'].contains('LTR')}">
    <link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/setFontOverride.css?ln=css&amp;version=#{language.myTimeinMill}" />
</ui:fragment>
于 2013-06-03T07:58:09.943 回答
1

实际上,您需要做的就是在 webapp/resources/css/mystyle.css 下创建一个文件夹,其中 mystyle.css 是您的 css 文件。

然后在你的jsf文件中,把

<h:outputStylesheet name="css/mystyle.css" />

JSF 将知道并正确加载您的 css 文件,而不会出现 RES_NOT_FOUND 错误。

PS。这已经用 primefaces jsf 2.2 进行了测试

于 2014-07-10T16:23:40.400 回答