自定义 JSF 组件:将“startElement”与“script”一起使用会产生注释

2024-01-02

我正在渲染一个自定义 JSF 组件。在方法中编码开始我想包含一些 javascript。

public void encodeBegin(FacesContext context) throws IOException {
   ResponseWriter writer = context.getResponseWriter();
   writer.startElement("script", this);
   writer.writeAttribute("type", "text/javascript", null);
   writer.writeText("var width=400",null);
   writer.endElement("script");
}

渲染组件时,脚本标记的内容将被注释掉。

<script type="text/javascript"><!--
var width=400;
//--></script>

谁能解释为什么会出现此评论以及我如何摆脱它?

提前致谢!


这是特定于 MyFaces 实现的,而不是特定于 JSF 规范的。 Mojarra 实现并没有这样做。

这种将 JavaScript 正文放在 HTML 注释中的方法基本上是 HTML 史前史的遗留物,当时浏览器不支持<script>元素。这些 HTML 注释基本上隐藏了 JavaScript 内容,以防止那些古老的 HTML 解析器将 JavaScript 代码解释和显示为纯文本.

也可以看看Mozilla 开发者网络 - 为 XHTML 编写 JavaScript https://developer.mozilla.org/en/docs/Writing_JavaScript_for_XHTML:

这是 HTML 中的常见做法,目的是向不支持 JS 的浏览器隐藏脚本。在 XML 时代,注释就是它们的本意:注释。在处理文件之前,所有注释都将从文档中删除,因此将脚本包含在其中就像将午餐扔进食人鱼池中一样。此外,注释掉你的脚本确实没有意义——过去十年编写的浏览器都不会在页面上显示你的代码。

请注意最后一句话,这是非常正确的,过去十年中开发的任何浏览器都不会再这样做。 MyFaces 显然有点过于热心地假设人们现在仍然会使用这样一种史前浏览器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 JSF 组件:将“startElement”与“script”一起使用会产生注释 的相关文章

随机推荐