Domanda

Il tentativo di utilizzare JSPX e in esecuzione in uno strano problema. Testo all'interno jsp: il testo si suppone di non essere soggetti a rimozione spazi bianchi, in base alla documentazione JSP, ma quando ho un jsp: elemento di testo con uno spazio vuoto all'inizio di un file Tagx, se usato nelle viste jspx, il leader spazio bianco scompare.

Ho fatto un po 'di Googling, ma non riesco a trovare che cosa sta causando questo da rimuovere. Ho verificato che lo stesso jsp:. Le istanze di testo inclusi direttamente nel lavoro vista jspx correttamente, ma messo in un file separato Tagx fa essere perduto

Questa è sotto Jetty 6.1.19 e 6.1.22 con JSP 2.1 librerie.

Modifica : Alcuni codice di esempio seguente. Si noti che gli spazi iniziali e finali all'interno dei tag <jsp:text> sono spogliati. A giudicare dalla documentazione JSP posso vedere, spazi bianchi all'interno di questi debba essere mantenuta.

WEB-INF / schede / nameValuePair.tagx:

<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page">
<jsp:directive.attribute name="name" type="java.lang.String" required="true"/>
<jsp:directive.attribute name="value" type="java.lang.String" required="true"/>
<jsp:text> ${name}=${value} </jsp:text>
</jsp:root>

test.jspx:

<jsp:root version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:t="urn:jsptagdir:/WEB-INF/tags">
<jsp:directive.page contentType="text/html; charset=ISO-8859-1" />

<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <t:nameValuePair name="name" value="Google" />
        <t:nameValuePair name="age" value="11" />
        <t:nameValuePair name="description" value="Popular Search Engine" />
        <jsp:text> test=value </jsp:text>
    </body>
</html>

</jsp:root>

uscita:

<html><head><title>Test</title></head><body>name=Googleage=11description=Popular Search Engine test=value </body></html>
È stato utile?

Soluzione

Sembra a me come il Tagx viene tagliata per rendere più semplice per scrivere i tag. Una nuova linea, alla fine, sarebbe, per esempio finire con uno spazio in cui viene utilizzato il tag e che potrebbe essere male.

Anche perché non mettere il testo nel tag in un arco:

<jsp:text><span> ${name}=${value} </span></jsp:text>

In alternativa, utilizzare lo spazio unificatore: &nbsp;

In questo modo si evita l'assetto e si dovrebbe ottenere il risultato desiderato.

Altri suggerimenti

Ho avuto questo problema con perdendo spazio bianco, anche. Sto usando documenti jspx e un compilatore pre per la produzione. Ma nella mia macchina di sviluppo Sto utilizzando un gatto incorporato per ricompilare la documentazione jspx al volo ogni volta che il jsp sta cambiando.

Per prima cosa ho bisogno per raggiungere gli stessi risultati di compilazione con il pre-compilatore e il compilatore Tomcat embedded con questo frammento per la mia web.xml

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jspx</url-pattern>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>

Con questa direttiva attivata sia comportarsi allo stesso. Se si tenta di preservare gli spazi bianchi non fare in questo modo:

<span class="ex1"> </span>
<span class="ex2"><jsp:text> </jsp:text></span>
<span class="ex3"> <jsp:text><!-- keep --> </jsp:text></span>
<span class="ex4"><!--  keep --></span>
<span class="ex5"><span> </span> <!--  keep --></span>
<span class="ex6">&#032;</span>
<span class="ex7">&#009;</span>

Queste sono le uniche opzioni che lavorano per me:

<span class="ex8">&#160;</span>
<span class="ex9"><c:out value=" " /></span>

Il jsp Compilation risultante è simile al seguente:

out.write("<span class=\"ex1\"/>");
out.write("<span class=\"ex2\">");
out.write("</span>");
out.write("<span class=\"ex3\">");
out.write("</span>");
out.write("<span class=\"ex4\">");
out.write("</span>");
out.write("<span class=\"ex5\">");
out.write("<span/>");
out.write("</span>");
out.write("<span class=\"ex6\"/>");
out.write("<span class=\"ex7\"/>");
out.write("<span class=\"ex8\">");
out.write(' ');
out.write("</span>");
out.write("<span class=\"ex9\">");
if (_jspx_meth_c_005fout_005f0(_jspx_th_ktr_005fform_005f0, _jspx_page_context))
  return true;
out.write("</span>");

Tra l'altro. Si vede il riferimento che è uno spazio non-breaking in XML che si traduce in out.write (' '); Nella JSP compilato. Ma lo spazio non-breaking è preservered anche se non lo vedi. Se fate una hexdump -C test.jspx si ottiene:

6f 75 74 2e 77 72 69 74  65 28 27 c2 a0 27 29 3b  |out.write('..');|

".." nelle colonne di destra mostra i caratteri non stampabili "c2 a0", che è unicode per "spazio unificatore".

Come spazio unificatore non è sempre quello che si vuole, l'unica opzione è <c: out value=""/>. Se ci sono altre opzioni, io sono felice di sentire su di esso nei commenti.

Il mio testo doveva ancora rompere, così ho aggiunto <wbr> prima che gli spazi tra le ${...}s.

Risulta che non funziona in Internet Explorer, e il problema era questa linea:

<%@ page trimDirectiveWhitespaces="true" %>

Questo è stato risolto:

<%@ page trimDirectiveWhitespaces="false" %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top