4

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

4

3 回答 3

7

不可以。Facelets 无法区分不必要的空白和必要的空白。为此,它需要确定单独的 HTML 标签,解析 CSS 和 JS 文件以获取任何证明它确实没有必要的证据。在 HTML<pre><textarea>标签、CSSwhite-space:pre属性和 JSelement.style.whiteSpace='pre'代码的情况下,空格很重要。

可靠地检查它太昂贵和复杂了。如果您真正关心的是网络带宽,那么只需在服务器级别打开 gzip 压缩即可。如何做到这一点取决于所使用的服务器,但在Tomcat上,它就像添加compression="on"到.<Connector>/conf/server.xml

但是,可以创建一个Filter替换响应编写器以修剪空白的方法。您可以在此处找到此类过滤器的示例。它只是不考虑 CSS/JS。

于 2011-02-28T11:44:40.243 回答
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 资源,因此这可以为您的应用程序带来一点推动。

于 2013-03-01T23:18:18.163 回答
2

我正在尝试找到简单的解决方案来压缩 html,删除在 primefaces>jsf>jsp>servlet 解析之后创建的空格。

我了解到,primefaces 可以帮助我压缩 js 和 css,但是它们对 HTML 无能为力,因为在 primefaces 解析之后发生了 jsf 到 jsp。

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>Sevlet 中,而不是每次输出时都这样做。此外,它是定制的(不是标准,没有记录等......)。

仍然想知道在 JSF 中“修剪空白”、“压缩 html”的简单方法。

于 2012-10-15T14:00:27.120 回答