2009-12-11 3 views
1

Пытается использовать JSPX и работать в странной проблеме. Текст внутри jsp: текст не должен подвергаться удалению пробелов в соответствии с документацией JSP, но когда у меня есть текстовый элемент jsp: с ведущими пробелами в начале файла tagx, при использовании в представлениях jspx ведущий пробелы исчезают.jsp: текст, теряющий пробел внутри tagx

Я проделал довольно много работы в Google, но не могу найти причину удаления. Я проверил, что те же jsp: текстовые экземпляры, включенные непосредственно в представление jspx, работают правильно, но помещены в отдельный файл tagx, заставляя его потеряться.

Это под Jetty 6.1.19 и 6.1.22 с использованием библиотек JSP 2.1.

EDIT: Ниже приведен пример кода образца. Обратите внимание, что пробелы, ведущие и завершающиеся в тегах <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> 
+0

Если вы замените пробелы точками или чем-то, они сохранены? Вы уверены, что нет другого места вокруг тега, который удаляет пробелы? Является ли пробелы вне тега удалены также или это только пробел вашего jsp: текст, который исчезает? – Brimstedt

+0

Обратите внимание, что теги jsp: text, которые теряют свои пробелы, находятся непосредственно под корнем jsp: файла tagx, и ничто не окружает их в файле jspx. Подобные jsp: текстовые теги непосредственно внутри файла jspx сохраняют свои ведущие и конечные пробелы, но те, что находятся внутри файла tagx, этого не делают. –

+0

Я не совсем уверен, в чем проблема. «Test = value» имеет пробелы на выходе. Элементы t: nameValuePair не имеют пробелов, что является правильным. Результат выглядит правильно! Один комментарий, который я могу сделать, это то, что есть два закрывающих тега. – Joshua

ответ

0

Он смотрит на меня, как Tagx в настоящее время обрезается, чтобы упростить запись тегов. Новая строка в конце, например, закончилась бы тем местом, где используется тег, и это может быть плохо.

Хотя почему бы не поместить текст в теге в пролете:

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

Или используйте неразрывный пробел: &nbsp;

Таким образом, вы избежите обивку, и вы должны получить результат, который вы хотите ,

+0

Я действительно хочу исправить источник HTML с тегом, а не с визуализируемым контентом. Таким образом, элемент или объект   кажется неправильным. –

+0

Тогда вам, вероятно, стоит подумать о написании тегов без использования jspx и сделать это с помощью класса, чтобы вы могли больше контролировать свой вывод. Хотя мне интересно, где вы хотите использовать источник? Является ли это источником сбережений, я могу понять, что это проблема, хотя, если она отображается на экране, это может быть неважно. – Knubo

0

У меня также была проблема с пропуском пробелов. Я использую jspx Documents и предварительный компилятор для производства. Но в моей машине разработки я использую встроенный tomcat для перекомпиляции документов jspx «на лету» всякий раз, когда jsp меняется.

Сначала мне нужно, чтобы достичь тех же результатов компиляции с прекомпилятором и встроенным TOMCAT компилятор с этим фрагментом для моего web.xml

<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">&#032;</span> 
<span class="ex7">&#009;</span> 

Это единственные варианты, которые работают для меня:

<span class="ex8">&#160;</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>"); 

Кстати. Вы видите ссылку  , которая является неразрывным пространством в XML, что приводит к out.write (''); в скомпилированном jsp.Но нераскрывающееся пространство сохраняется, даже если вы его не видите. Если вы делаете hexdump -C test.jspx вы получите:

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

«..» в правой колонке показывает НЕРАСПРОСТРАНЕНИИ печатаемые символы „c2 a0“, который юникод для „неразрывного пробела“.

В качестве незащищенного пространства не всегда требуется то, что вы хотите, единственный вариант - <c: out value=""/>. Если есть другие варианты, я рад услышать об этом в комментариях.