依赖于浏览器的CSS切换与JSF

alf*_*onx 13 css jsf-2

我需要在我的JSF2应用程序中使用一些特定于浏览器的CSS(Mojarra 2.1,Tomcat 7).

我尝试添加到我的模板:

    <!--[if IE 8]>
        <link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE8}" />
    <![endif]-->
Run Code Online (Sandbox Code Playgroud)

但由于我也使用了以下注释:

<context-param>
    <!-- Removes any comments from the rendered HTML pages. -->
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

我的问题...当我禁用`javax.faces.FACELETS_SKIP_COMMENTS时,我得到了一堆其他问题.而且我不认为我的源代码注释属于生成的页面.

我也尝试将开关放在CDATA中:

<![CDATA[
 <!--[if IE 7]>
        <link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE7}" />
 <![endif]-->
]]>
Run Code Online (Sandbox Code Playgroud)

但内部<呈现为html实体..: - /,所以它不起作用.

问题:还有其他解决方案吗?是否存在任何JSF2标记来处理这个问题?外部标签库?

先谢谢,史蒂夫

Bal*_*usC 18

唯一的方法是使用<h:outputText escape="false">.

<h:outputText value="&lt;!--[if IE 8]&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;#{cfgs.externalCssUrlIE8}&quot; /&gt;&lt;![endif]--&gt;" escape="false" />
Run Code Online (Sandbox Code Playgroud)

是的,这是一条丑陋的线.但是没有其他标准方式.


更新:JSF实用程序库OmniFaces<o:conditionalComment>正是为了这个目的而提供的,这样你就不再需要丑陋<h:outputText escape="false">了:

<o:conditionalComment if="IE 8">
    <link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE8}" />
</o:conditionalComment>
Run Code Online (Sandbox Code Playgroud)