如何删除JSF输出中的空格?

时间:2011-02-28 07:25:56

标签: java jsf facelets removing-whitespace

是否可以配置JSF 2.0以删除XHTML标记之间不必要的空格?

3 个答案:

答案 0 :(得分:7)

没有。 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来替换响应编写器以修剪空白。您可以找到here此类过滤器的示例。它只是不考虑CSS / JS。

答案 1 :(得分:4)

这个答案来自我的博客:

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


您可以使用MyFaces Core 2.1.10或更高版本删除这些空格,并在faces-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编译器中完成的,因此减少空格的工作只需执行一次,因此所有页面都不会产生额外的CPU或内存开销。更重要的是,它减少了渲染页面所需的内存和CPU资源,因此这可以为您的应用程序带来一点推动。

答案 2 :(得分:2)

我试图找到简单的解决方案来压缩html删除在primefaces&gt; jsf&gt; jsp&gt; servlet解析后创建的空格。

我了解到,primefaces可以帮助我压缩js和css然而他们无法对HTML做任何事情,因为jsf到jsp在primefaces解析后发生。

JSP规范曾经有一个指令

  <%@ page trimDirectiveWhitespaces="true" %> 

做我需要的事。

此外,如果需要,我们可以在web.xml中处理它。

我知道正确的方法是配置Web服务器来处理它。

然而,jBoss 7.1.1失去了对JSP配置的敏感性。 (问题始于7.0时,我们必须在每次JSP更改后重新启动服务器。它已修复并返回到7.1。假设已在7.2中修复但7.2还没有出来。)

无论如何,jBoss是很好的工具。

我的问题是我们是否正在失去从JSP到JSF的功能。

它应该是某种标记告诉JSF将trimDirectiveWhitespaces放入JSP中,它试图将自己解析为。

我不喜欢“过滤器”解决方案,因为它会在每次流式传输时修剪输出。我宁愿将它编译成JSP&gt; Sevlet,而不是每次出门时都这样做。此外,它是定制的(不是标准的,没有记录等...)。

还想知道简单的方法来“修剪空白”,“压缩HTML”......在JSF中。