2012-12-26 8 views
17

これはEclipseの私のソースコードファイルです:JSFでInternet Explorerの条件付きコメントを使用するには?

<!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サーブレットによって提供されましたか?

答えて

16

既知の問題では、JSFレンダリングがコメントをエスケープします。 <h:outputText escape="false">とHTMLエンティティを使用して解決できます。また、OmniFaces <o:conditionalComment>を使用してより良い方法でそれを解決することもできます。 See also the showcase site:

<o:conditionalComment>は条件付きコメントを表示します。条件付きコメントは、IE固有の機能であり、クライアントがIEを使用しているかどうか、またどのバージョンであっても、HTMLブロックをコメントアウトすることができます。彼らは、多くの場合、そのようなCSSスタイルシートとの組み合わせで見られる:

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

しかし、Faceletsのは、それが使用できなくなりますどのHTMLエスケープコメントの内容をレンダリングします。 javax.faces.FACELETS_SKIP_COMMENTSコンテキストのparamがtrueに設定されている場合

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

また、それはでも、すべてでレンダリングされることはありません。あなたは醜い<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:head>の直接の子として移転されるように、あなたが<h:outputStylesheet>でこれを使用することはできません。

9

この作品:

<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> 
+2

醜い、地獄として、しかし、それは魅力のように動作します。ありがとう! –

+1

スクリプトの部分をそこに入れる必要はありません。また、それを分割してscriptTagをoutputTextの外に保つこともできます。 –

2

私はFを使用:逐語的に、より多くのクリーナーを。

例えば

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

JSF Core Tag Reference

注:このタグは、JSF 2.0(2009年12月)以降推奨されていません。それはJSPのためだけに意図されている

+0

このタグは、JSF 2.0(2009年12月)以降非推奨です。それはJSPのためだけに意図されています。 – BalusC

関連する問題