Как убрать пробелы в выводе JSF? - PullRequest
4 голосов
/ 28 февраля 2011

Можно ли настроить JSF 2.0 для удаления ненужных пробелов между тегами XHTML?

Ответы [ 3 ]

7 голосов
/ 28 февраля 2011

Нет.Facelets не может отличить ненужные пробелы от необходимых пробелов.Для этого нужно будет определить отдельные теги HTML, проанализировать файлы CSS и JS на наличие доказательств того, что это действительно не нужно.В случае тегов HTML <pre> и <textarea>, свойства CSS white-space:pre и кода JS element.style.whiteSpace='pre', пробел имеет большое значение.

Просто слишком дорого и сложно проверить это надежно.Если ваша фактическая проблема - пропускная способность сети, просто включите сжатие gzip на уровне сервера.Как это сделать, зависит от используемого сервера, но, например, от Tomcat это так же просто, как добавить compression="on" к элементу <Connector> в /conf/server.xml.

Однако можно создать Filterкоторый заменяет писателя ответа, чтобы урезать пробел.Вы можете найти здесь пример такого фильтра.Он не учитывает только CSS / JS.

4 голосов
/ 02 марта 2013

Этот ответ приходит из моего блога:

http://lu4242.blogspot.com/2012/12/html-white-space-compression-for-jsf.html


Вы можете удалить эти пробелы, используя MyFaces Core версии 2.1.10 или выше, добавив это в файлface-config.xml:

<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                     http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd"
                     version="2.1">
    <faces-config-extension>
        <facelets-processing>
            <file-extension>.xhtml</file-extension>
            <process-as>xhtml</process-as>
            <oam-compress-spaces>true</oam-compress-spaces>
        </facelets-processing>
    </faces-config-extension>
</faces-config>

Вот и все. Теперь компилятор Facelets будет пытаться уменьшить или удалить пробелы / табуляции, когда они не нужны, следуя правилам сжатия пустого пространства html, чтобы избежать изменения внешнего вида страницы. Проще говоря, это означает, что при необходимости он заменяет несколько непрерывных пробелов только одним или удаляет все из них. Также старайтесь по возможности использовать символы \ n для упрощения чтения разметки страницы после сжатия.

Поскольку эта оптимизация выполняется в компиляторе Facelets, усилия по сокращению пробелов выполняются только один раз, поэтому все ваши страницы не будут налагать дополнительные затраты ресурсов процессора или памяти. Более того, он уменьшает память и ресурсы ЦП, необходимые для рендеринга страницы, так что это может немного повысить ваше приложение.

2 голосов
/ 15 октября 2012

Я пытаюсь найти простое решение для сжатия html, удаляя пробелы, созданные после анализа простых лиц> jsf> jsp> servlet.

Я узнал, что простые лица могут помочь мне сжимать js и css, однако они ничего не могут сделать с HTML, потому что jsf в jsp происходит после разбора простых лиц.

Спецификации JSP имели директиву

  <%@ page trimDirectiveWhitespaces="true" %> 

, чтобы делать то, что мне нужно.

Кроме того, мы могли бы обработать это в web.xml при необходимости.

Я знаю, что правильный способ - это настроить веб-сервер для его обработки.

Однако jBoss 7.1.1 потерял чувствительность к конфигурации JSP.(Проблема началась в 7.0, когда нам пришлось перезапускать сервер после каждого изменения JSP. Он был исправлен и вернулся в 7.1. Предполагается, что исправлено в 7.2, но 7.2 еще не вышло.)

В любом случаеJBoss - прекрасный инструмент.

Мой вопрос заключается в том, что мы теряем функциональность при переходе от JSP к JSF.

Это должен быть какой-то тег, указывающий JSF помещать trimDirectiveWhitespaces в JSP, в который он пытается разобрать себя.

Мне не нравится решение "фильтра", потому что оно будет обрезать вывод каждый раз, когда мы его выводим.Я предпочитаю компилировать его в JSP> Sevlet, а не делать это каждый раз по пути.Кроме того, он сделан на заказ (не является стандартным, не документирован и т. Д.).

Еще хотелось бы узнать простой способ «обрезать пробелы», «сжимать html» ... в JSF.

...