Подтвердить что ты не робот

Как использовать условные комментарии Internet Explorer в JSF?

Это мой исходный код в Eclipse:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>

<body>

</body>
</html>

Когда я рассматриваю это в IE9, он отображает текст:

<!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->

Если я рассматриваю источник, он говорит:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<!--[if lt IE 9]&gt;

      &lt;script src=&quot;http://html5shim.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;

    &lt;![endif]-->
</head>

<body>


</body>
</html>

Любая причина, по которой источник изменился после обслуживания сервлетом Faces?

4b9b3361

Ответ 1

Известная проблема, JSF-рендеринг избегает комментариев. Вы можете решить эту проблему, используя <h:outputText escape="false"> и HTML-объекты. Вы также можете использовать OmniFaces <o:conditionalComment>, чтобы решить проблему лучше. См. также сайт витрины:

<o:conditionalComment> выполняет условный комментарий. Условные комментарии - это особенность, специфичная для IE, которая позволяет разработчику выделять блоки комментариев HTML в зависимости от того, использует ли клиент IE, и если да, то какая версия. Они часто видны в сочетании с таблицами стилей CSS, например:

<!--[if lte IE 7]>
    <link rel="stylesheet" href="ie6-ie7.css" />
<![endif]-->

Тем не менее, Facelets отображает содержимое комментария, выведенное HTML, что делает его непригодным.

<!--[if lte IE 7]&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;ie6-ie7.css&quot; /&gt;
&lt;![endif]-->

Кроме того, если параметр javax.faces.FACELETS_SKIP_COMMENTS context равен true, то он даже не будет отображаться вообще. Вам нужно будет обходиться с уродливым <h:outputText escape="false">.

<h:outputText 
    value="&lt;!--[if lte IE 7]&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;ie6-ie7.css&quot; /&gt;&lt;![endif]--&gt;"
    escape="false" />

Этот компонент предназначен для решения этой проблемы.

<o:conditionalComment if="lte IE 7">
    <link rel="stylesheet" href="ie6-ie7.css" />
</o:conditionalComment>

Обратите внимание, что вы не можете использовать это с <h:outputStylesheet>, поскольку он неявно будет перемещен как прямой дочерний элемент <h:head>.

Ответ 2

Это работает:

<h:outputText escape="false" value="&lt;!--[if lt IE 9]&gt;   &lt;script src=&quot;http://html5shim.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;  &lt;![endif]--&gt;"></h:outputText>

Ответ 3

Я использовал f: verbatim, намного более чистым.

Например

<f:verbatim>
    <!--[if gte IE 8]>
       <script type="text/javascript">
        //<![CDATA[
        /** Javascript **/
        //]]>
        </script>
    <![endif]-->
</f:verbatim>

Ссылка на основной тезис JSF

Примечание. Этот тег устарел с JSF 2.0 (декабрь 2009 г.). Он предназначен только для JSP