是否可以配置 JSF 2.0 以删除 XHTML 标记之间不必要的空格?
3 回答
不可以。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。
这个答案来自我的博客:
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 资源,因此这可以为您的应用程序带来一点推动。
我正在尝试找到简单的解决方案来压缩 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”的简单方法。