我正在使用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},每次看到不同的时间.
解决方法
我看到的唯一方法是使用简单的< link>标签.
使用< h:outputStylesheet />是不可能的.在URL中添加参数.关于这个主题的一个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: outputScript with “name” attribute and nested
content. Ignoring nested content.
那就是说,我建议这个解决方案:
<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>