【发布时间】:2011-02-28 07:25:56
【问题描述】:
是否可以配置 JSF 2.0 以删除 XHTML 标记之间不必要的空格?
【问题讨论】:
标签: java jsf facelets removing-whitespace
是否可以配置 JSF 2.0 以删除 XHTML 标记之间不必要的空格?
【问题讨论】:
标签: java jsf facelets removing-whitespace
没有。 Facelets 无法区分不必要的空白和必要的空白。为此,它需要确定单独的 HTML 标记,解析 CSS 和 JS 文件以获取任何证明它真的不必要的证据。对于 HTML <pre> 和 <textarea> 标签,CSS white-space:pre 属性和 JS element.style.whiteSpace='pre' 代码,空格很重要。
可靠地检查它太昂贵和复杂了。如果您实际关心的是网络带宽,那么只需在服务器级别打开 gzip 压缩。如何做到这一点取决于所使用的服务器,但在 Tomcat 上,就像将 compression="on" 添加到 /conf/server.xml 中的 <Connector> 元素一样简单。
但是,可以创建一个 Filter 来替换响应编写器以修剪空白。您可以找到here 此类过滤器的示例。它只是不考虑 CSS/JS。
【讨论】:
<pre> 和 <textarea>、CSS white-space 和 JS element.style.whiteSpace?
这个答案来自我的博客:
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 无能为力,因为 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>Sevlet 中,而不是每次输出时都这样做。此外,它是定制的(不是标准,没有文档等......)。
仍然想知道在 JSF 中“修剪空白”、“压缩 html”... 的简单方法。
【讨论】: