我正在使用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}
,每次看到不同的时间。
答案 0 :(得分:2)
我看到的唯一方法是使用普通<link>
标记。
使用<h:outputStylesheet />
在网址中添加参数是不可能的。关于此主题的一个answer 在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&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&version=#{language.myTimeinMill}" />
</ui:fragment>
答案 1 :(得分: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
进行了测试