2012-12-26 14 views
17

Questo è il mio file di codice sorgente in Eclipse:Come utilizzare i commenti condizionali di Internet Explorer in JSF?

<!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> 

Quando osservo questo IE9 rende il testo:

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

Se ho vista origine che dice:

<!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> 

Qualche motivo per cui la fonte è cambiata una volta servita dal Faces Servlet?

risposta

16

Problema noto, il rendering JSF sfugge ai commenti. Puoi risolverlo usando le entità <h:outputText escape="false"> e HTML. È inoltre possibile utilizzare OmniFaces <o:conditionalComment> per risolverlo in modo più gradevole. See also the showcase site:

Il <o:conditionalComment> esegue il rendering di un commento condizionale. I commenti condizionali sono una funzionalità specifica di IE che consente allo sviluppatore di commentare blocchi di HTML a seconda che il client stia utilizzando IE e, in tal caso, anche quale versione. Essi sono spesso visti in combinazione con fogli di stile CSS in questo modo:

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

Tuttavia, Facelets rende il contenuto del commento HTML escape che lo rende inutilizzabile.

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

Inoltre, se javax.faces.FACELETS_SKIP_COMMENTS contesto param è impostato su true allora sarà anche non essere reso a tutti. Dovresti risolvere il problema con un brutto <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" /> 

Questo componente è progettato per risolvere questo problema.

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

Si noti che non è possibile utilizzare questo con <h:outputStylesheet> come sarebbe implicitamente essere trasferito come figlio diretto di <h:head>.

9

Questo funziona:

<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

Brutto, come l'inferno, ma funziona, come un fascino. Grazie! –

+1

Non è necessario inserire la parte di script qui. Puoi anche dividerlo e mantenere il tag di script fuori da outputText. –

2

ho usato f: Verbatim, molto più pulito.

Per esempio

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

JSF Core Tag Reference

Nota:Questo tag è deprecato dal JSF 2.0 (dic 2009). È intented per JSP solo

+0

Questo tag è obsoleto dal JSF 2.0 (dic 2009). È concepito solo per JSP. – BalusC