автоматическая обрезка пробелов в jsps

есть ли хороший способ обрезать пробелы, созданные JSP, не прибегая к следующим методам:

  • Директива trimSpaces jasper: может испортить ваш макет, съев значительные пробелы там, где вы хотите.
  • окружающие области, которые вы хотите обрезать, с помощью комментариев JSP, комментируя пробелы. это затрудняет редактирование JSP и выглядит ужасно

Я хотел бы знать, знает ли кто-нибудь лучший способ выборочно обрезать пробелы в JSP.

редактировать: сейчас я помещаю все свои теги в один, например, вот так:

<c:forEach var="date" items="${model.list}"><%--
--%><c:set var="dateStr"><ct:dateFormat date="${date.startDate}"/></c:set><%--
--%><option value="${dateStr}">${dateStr}</option><%--
--%></c:forEach>

person mkoryak    schedule 03.12.2009    source источник
comment
вам следует подумать, хорошо ли сделан ваш макет, если он зависит от пробелов.   -  person Bozho    schedule 03.12.2009


Ответы (4)


Здесь вы имеете дело с выбором наименьшего из всех зол. Я бы использовал директиву jasper trimSpaces, и если у вас есть пробелы, которые важны в вашем макете, вы можете стратегически вставить пробелы следующим образом:

<c:out value=" " />

или вот так:

${ }

Другие варианты обрезки пробелов, которые не были упомянуты в вашем сообщении:

  • Напишите фильтр сервлета, который обрезает пробелы на этапе пост-рендеринга (это должно быть достаточно умно, чтобы не обрезать ваши «значительные» пробелы).
  • Поместите все теги jsp в одну строку (шучу, не делайте этого!)
person Asaph    schedule 03.12.2009
comment
может быть, если бы я запускал новое веб-приложение, это был бы выбор, но чтобы вернуться к более чем 40 тысячам строк кода и вставить пробелы ... мне нужно передать это на аутсорсинг. - person mkoryak; 04.12.2009
comment
@mkoryak: я добавил еще несколько стратегий. Смотрите мой обновленный ответ. - person Asaph; 04.12.2009
comment
в итоге я помещаю все свои теги в одну строку, я обновил свой вопрос примером. - person mkoryak; 04.12.2009

кушайте там, где хотите

Можете ли вы привести пример? Я действительно не могу представить себе такую ​​потребность.

Вы имеете в виду внутри текстовых полей? Внутри элементов HTML <pre>? Внутри элементов в стиле CSS white-space:pre? Параметр Tomcat trimSpaces должен учитывать их.

Или вы имеете в виду пробелы для layout? Ну, им действительно не место там. Рассмотрите возможность замены свойствами поля/отступа CSS и сохраните настройку trimSpaces.

person BalusC    schedule 04.12.2009
comment
Пример обеденных мест там, где вы хотите: <c:out value="${person.firstname}" /> <c:out value="${person.lastname}" />. С trimSpaces Джаспера имя и фамилия сжимаются вместе без пробелов между ними. Конечно, есть элегантный обходной путь: <c:out value="${person.firstname} ${person.lastname}" />. - person Asaph; 04.12.2009
comment
именно то, что сказал Асаф. Кроме того, элегантное обходное решение не всегда работает так просто, если в вашем JSP много условных выражений, циклов и т. д., тогда труднее объединить такой вывод без использования множества сеттеров и т. д. - person mkoryak; 04.12.2009
comment
эти пробелы могут быть эффективно / - person Bozho; 04.12.2009

проверьте фильтр обрезки из JSOS: http://www.servletsuite.com/servlets/trimflt.htm

person Den    schedule 06.12.2009

Попробуйте: http://coldjava.hypermart.net/servlets/trimflt.htm Просто реализовал это сам как фильтр сервлета, работает прелесть.

Другой вариант: htmlcompressor (погуглите, я могу предоставить только 1 ссылку на банкомат...)

taglib htmlcopressor позволяет использовать обертку, а также имеет компрессоры для css и js.

person BGerrissen    schedule 02.08.2010