JSPX è perfettamente adatta per la produzione di HTML e XHTML.
Si riduce alla comprensione della natura XML di questa lingua. JSPX è XML mentre HTML non lo è. Una delle implicazioni è che il parser JSPX "minimizza" i tag vuoti perché XML non distingue tra tag a chiusura automatica e tag vuoti. Ciò causa i problemi dei tag <script...>
e <div></div>
. Tuttavia, vale la pena notare che mentre i file JSPX devono essere XML validi, , l'output che producono non è. Quindi è perfettamente corretto avere un file JSPX che produca HTML (non solo XHTML). In effetti, è possibile utilizzare JSPX per produrre qualsiasi output testuale come CSV, CSS o JS anche se sarebbe piuttosto scomodo.
Tenuto conto di quanto sopra, la soluzione più pulita sembra essere la creazione di un taglib personalizzato con tag come htmlScript, htmlDiv, ecc Questi tag possono essere utilizzati in questo modo:
<html:div styleClass="foo" selfClosing="false">${message}<html:div>
suo output HTML conterrebbe il tag di chiusura, a prescindere dal contenuto:
<div style="foo"></div>
<div style="foo">Hello</div>
Un taglib come questo sarebbe consentono di creare pagine HTML con JSPX senza usare piuttosto brutte soluzioni alternative.
Creazione di pagine HTML sembra essere una delle applicazioni più comuni di JSPX. È piuttosto sorprendente che non ci sia una libreria HTML standard. JSF ne ha uno, ma se usi JSP pulito non ti aiuterà. Potrebbe esserci una biblioteca di terze parti che colma questa lacuna, ma non sono riuscita a trovarne una.
Se non avete voglia di scrivere il vostro taglib, un approccio alternativo è quello di utilizzare CDATA:
<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js">]]>
o:
<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>]]>
Altre proposte nelle questioni correlate dovevano mettere un commentare o vuoto <jsp:text>
all'interno <script>
che fornisce lo stesso risultato:
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><!-- Prevent self-closing --></script>
(come ha osservato Ralph, quanto sopra non funziona con WebSphere) o:
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><jsp:text></jsp:text></script>
CDATA si rivela utile anche in alcuni altri casi. Uno di questi è la stampa del doctype HTML5 (<!DOCTYPE html>
). JSPX non ti consente di inserire la dichiarazione DOCTYPE nel tuo documento perché non è un XML valido. JSPX deifora anche il tag jsp: output ma stampa l'attributo SYSTEM anche quando è vuoto. Una soluzione è quella di avvolgere il DOCTYPE nel CDATA all'inizio di una pagina:
<![CDATA[<!DOCTYPE html>]]>
CDATA può anche essere utilizzato per incapsulare JavaScript inline. Mentre questo produce l'analisi di errore a causa della "<" segno:
<script type="text/javascript">
var x = 7 < 5;
</script>
questo funzionerà bene:
<script type="text/javascript">
<![CDATA[
var x = 7 < 5;
]]>
</script>
noti che CDATA nel JSPX uscite tutto così com'è ma valuta comunque espressioni EL. Così il seguente:
<![CDATA[
<jsp:expression>"asd " + "def"</jsp:expression>
${1 + 2}
]]>
produce:
<jsp:expression>"asd " + "def"</jsp:expression>
3
Spero che questo aiuti :)
JSP/JSPX è una tecnologia obsoleta. Considerare Facelets. Correlato: http://stackoverflow.com/questions/2935759/is-it-possibile-per-utilizzare-sanguefile-con-html-4-5 – BalusC