Frage

Der Versuch, JSPX und läuft in ein seltsames Problem zu verwenden. Text in jsp: Text sollte nicht Leerzeichen Entfernung unterzogen werden, nach der JSP-Dokumentation, aber wenn ich eine jsp: Textelement mit Leerzeichen führen am Anfang einer Tagx Datei, wenn sie in den JSPX Ansichten verwendet, die führenden Leerzeichen verschwindet.

Ich habe ziemlich viel googeln getan, aber nicht finden, was diese entfernt werden, verursacht. Ich habe festgestellt, dass die gleiche jsp:. Textinstanzen korrekt direkt in der JSPX Ansicht Arbeit aufgenommen, sondern in eine separate Tagx Datei bewirkt, dass es verloren sein

Dies ist unter Jetty 6.1.19 und 6.1.22 mit JSP 2.1-Bibliotheken.

Bearbeiten : Einige Beispielcode folgt. Beachten Sie, dass die Räume Vorder- und Hinter innerhalb der <jsp:text> Tags entfernt werden. Gemessen an der JSP Dokumentation ich sehen kann, Leerzeichen innerhalb diejenigen beibehalten werden sollte.

WEB-INF / tabs / 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>

Ausgabe:

<html><head><title>Test</title></head><body>name=Googleage=11description=Popular Search Engine test=value </body></html>
War es hilfreich?

Lösung

Es scheint mir, wie die Tagx es einfacher zu machen getrimmt wird, um die Tags zu schreiben. Eine neue Zeile am Ende zum Beispiel würde mit einem Raum enden, wo der Tag verwendet wird und so schlimm sein könnte.

Obwohl, warum setzen Sie Ihren Text nicht in dem Tag in einer Spanne:

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

oder das Geschütztes Leerzeichen verwenden: &nbsp;

Auf diese Weise kann die Trimmung vermeiden, und Sie sollen das gewünschte Ergebnis erhalten.

Andere Tipps

Ich hatte dieses Problem mit Leerzeichen zu verlieren, auch. Ich verwende JSPX Dokumente und eine Pre-Compiler für die Produktion. Aber in meiner Entwicklung Maschine, die ich ein eingebettetes tomcat bin mit dem JSPX docs on the fly neu kompiliert werden, wenn die jsp ändert.

Zuerst habe ich benötigt, um die gleiche Zusammenstellung Ergebnisse mit dem Precompiler und der eingebetteten tomcat Compiler mit diesem Code-Schnipsel für meine web.xml

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

Mit dieser Richtlinie aktiviert beide das gleiche Verhalten. Wenn Sie versuchen, Leerzeichen zu erhalten nicht tun es wie folgt aus:

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

Dies sind die einzigen Optionen, die für mich arbeiten:

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

Die resultierende jsp Compilation sieht wie folgt aus:

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>");

Durch die Art und Weise. Sie sehen die Referenz, die ein non-breaking Raum in XML ist, die in out.write Ergebnisse (‘‚); in der kompilierten jsp. Aber der non-breaking Raum preservered auch wenn Sie es nicht sehen. Wenn Sie eine hexdump -C test.jspx tun bekommen Sie:

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

„..“ in der rechten Spalte zeigt die nicht druckbare Zeichen ‚c2 a0‘, die Unicode für ‚Geschütztes Leerzeichen‘ ist.

Als Geschütztes Leerzeichen nicht immer ist das, was Sie wollen, ist Ihre einzige Option <c: out value=""/>. Wenn es andere Möglichkeiten gibt, ich bin glücklich darüber in den Kommentaren zu hören.

Mein Text hatte noch zu brechen, so dass ich hinzugefügt <wbr> vor den Räumen zwischen dem ${...}s.

heraus, dass Stellt sich nicht in Internet Explorer arbeiten, und das Problem war diese Zeile:

<%@ page trimDirectiveWhitespaces="true" %>

Dieses regelte es:

<%@ page trimDirectiveWhitespaces="false" %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top