условные комментарии отображаются в HTML-экранировании в Facelets - PullRequest
2 голосов
/ 20 декабря 2011

Я пытаюсь использовать условный комментарий IE для объявления ресурса CSS:

<h:outputStylesheet name="common.css" library="css" />
<!--[if IE]>
    <link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />   
<![endif]-->    

Однако, похоже, это не работает.Я вижу это в моем сгенерированном выводе HTML:

<link type="text/css" rel="stylesheet" href="/context/faces/javax.faces.resource/common.css?ln=css" />        
<!--[if IE]&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/context/faces/javax.faces.resource/ie.css?ln=css&quot;/&gt;
&lt;![endif]-->

Работает нормально без условного комментария.Я не использую контекстный параметр javax.faces.FACELETS_SKIP_COMMENTS.Как это вызвано и как я могу решить это?

Ответы [ 2 ]

7 голосов
/ 20 декабря 2011

Это действительно не будет работать, так как Facelets неявно HTML-экранирует содержимое комментария. Лучше всего поставить <h:outputText escape="false"> следующим образом:

<h:outputText value="&lt;!--[if IE]&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/#{resource['css:ie.css']}&quot; /&gt;&lt;![endif]--&gt;" escape="false" />

Это, однако, линия безобразия. В служебной библиотеке JSF OmniFaces есть <o:conditionalComment> именно для этой цели:

<o:conditionalComment if="IE">
    <link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />   
</o:conditionalComment>

Не связано с конкретной проблемой, вы на самом деле не используете атрибут library правильным способом. Он должен идентифицировать общую «тему», а не подпапку, в которую помещены файлы, просто вместо этого поместите эту подпапку в атрибут name. См. Также Для чего нужна библиотека ресурсов JSF и как ее использовать?

<h:outputStylesheet name="css/common.css" />
<o:conditionalComment if="IE">
    <link rel="stylesheet" type="text/css" href="#{resource['css/ie.css']}" />   
</o:conditionalComment>
3 голосов
/ 09 марта 2013

Я предлагаю

<h:outputText value="&lt;!--[if IE]&gt; " escape="false"/>
  <link rel="stylesheet" type="text/css" href="#{request.contextPath}/faces/javax.faces.resource/ie.css?ln=css" />
<h:outputText value=" &lt;![endif]--&gt;" escape="false"/>

Таким образом, вы избегаете только небольшого куска кода и # {request.contextPath} работает как положено

...