17

これは、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 サーブレットによって提供されたソースが変更された理由は何ですか?

4

3 に答える 3

17

既知の問題、JSF レンダリングはコメントをエスケープします。<h:outputText escape="false">および HTML エンティティを使用して解決できます。OmniFaces<o:conditionalComment>を使用して、より適切な方法で解決することもできます。ショーケース サイトも参照してください。

<o:conditionalComment>、条件付きコメントをレンダリングします。条件付きコメントは IE 固有の機能であり、クライアントが IE を使用しているかどうか、使用している場合はバージョンに応じて、開発者が HTML のブロックを (アウト) コメントできるようにします。次のような 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_COMMENTScontext param が に設定されて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>

于 2012-12-26T23:53:31.983 に答える
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>
于 2012-12-26T23:58:48.980 に答える
2

f:verbatim を使用しました。よりクリーンです。

例えば

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

JSF コア タグ リファレンス

注: このタグは、JSF 2.0 (2009 年 12 月) 以降は推奨されていません。JSPのみを対象としています

于 2015-12-29T22:52:07.863 に答える