JSP:テキストはtagx内の空白を失います
-
19-09-2019 - |
質問
JSPXを使用しようと奇妙な問題に実行しています。 JSP内のテキスト:テキストは、JSPのドキュメントによると、空白除去の対象とならないことになっているが、私は、JSPがある場合:JSPXビューで使用する場合、大手、tagxファイルの先頭に空白をリードすると、テキスト要素を空白が消えます。
私は、グーグルのビットをかなりやったが、これを削除する引き起こしているものを見つけることができません。テキストインスタンスが正しくJSPXビューの作業に直接含まれていますが、別のtagxファイルに入れ失われ、それを引き起こし
:私は、同じJSPがいることを確認しました。これは、JSP 2.1のライブラリを使用して桟橋6.1.19および6.1.22の下でます。
編集:一部のサンプルコードは、次のとおりです。 <jsp:text>
タグ内先頭と末尾のスペースが取り除かれることに注意してください。 JSP文書から判断すると、私はそれらの内の空白を保持する必要がある、見ることができます。
WEB-INF /タブ/ 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>
出力:
<html><head><title>Test</title></head><body>name=Googleage=11description=Popular Search Engine test=value </body></html>
解決
これは、私には見えます。最後に新しい行は、例えば、タグが使用された空間で終わるだろうと、それは悪いかもしれません。
なぜスパンでタグにテキストを入れていないがます:
<jsp:text><span> ${name}=${value} </span></jsp:text>
またはノーブレークスペースを使用します。
この道ます。
他のヒント
私も、空白を失うことでこの問題を抱えていました。私はJSPXドキュメントと生産のための事前のコンパイラを使用しています。しかし、私の開発マシンに私は、JSPが変更されるたびに、その場でJSPXドキュメントを再コンパイルする組み込みのTomcatを使用しています。
まず、私は私のweb.xml
のために、このスニペットでプリコンパイラおよび組み込みのTomcatコンパイラと同じコンパイル結果を達成するのに必要な
<jsp-config>
<jsp-property-group>
<url-pattern>*.jspx</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
このディレクティブでは、両方が同じように動作活性化しました。
:あなたは空白を保持しようとした場合の をしていないが、このようにそれを行います<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"> </span>
<span class="ex7">	</span>
これは私のために働く唯一のオプションがあります:
<span class="ex8"> </span>
<span class="ex9"><c:out value=" " /></span>
結果のJSPコンパイルは次のようになります:
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>");
ところで。あなたは(」「)out.write、その結果XMLで改行なしスペースがあるリファレンスを参照してください。コンパイルされたJSPインチしかし、非改行スペースは、あなたがそれを見ていない場合でもpreserveredされます。あなたがhexdump -C test.jspx
を行う場合は、取得します:
6f 75 74 2e 77 72 69 74 65 28 27 c2 a0 27 29 3b |out.write('..');|
「..」右列の非印字可能文字 『C2 A0』 『ノーブレークスペース』のUnicodeであるかを示します。
ノーブレークスペースはいつもあなたが望むものではないので、あなたの唯一のオプションは<c: out value=""/>
です。他のオプションがある場合は、私がコメントでそれを聞いてうれしいです。
私のテキストは、まだ壊れていたので、私は<wbr>
s間のスペースの前に${...}
を追加します。
Internet Explorerで動作しないことが判明し、問題は、この行だっます:
<%@ page trimDirectiveWhitespaces="true" %>
このはそれを固定します:
<%@ page trimDirectiveWhitespaces="false" %>