我正在渲染自定义JSF组件。在 encodeBegin 方法中,我想包含一些java脚本。
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>
有人可以解释为什么会出现这个评论以及我如何摆脱它?
提前致谢!
答案 0 :(得分:3)
这特定于MyFaces实现,而不是JSF规范。 Mojarra实现不会这样做。
这种将JavaScript主体放在HTML注释中的方法基本上是HTML史前时的遗留物,当存在不支持<script>
元素的浏览器时。这些HTML注释基本上隐藏了JavaScript内容,以防止那些古老的HTML解析器将JavaScript代码解释和显示为纯文本。
另见Mozilla Developer Network - Writing JavaScript for XHTML:
这是HTML中的常见做法,用于从不具备JS功能的浏览器中隐藏脚本。在XML时代,评论是他们的意图:评论。在处理文件之前,所有注释都将从文档中删除,因此将脚本包含在其中就像在食人鱼池中撒上午餐一样。此外,没有必要评论您的脚本 - 过去十年没有编写任何浏览器会在页面上显示您的代码。
请注意最后一句,这是非常正确的,过去十年中没有一个浏览器会再这样做了。假设现在仍然会使用这样的史前浏览器,MyFaces显然有点过于夸张。
答案 1 :(得分:1)
没关系
这种做法是将javascript代码标记为注释,因此自动工具不会尝试将其解析为HTML(例如,检查您的网页是否符合HTML 4的工具)。
Javascript引擎会忽略HTML评论并处理代码(Javascript评论为/*
和//
此方法的一种变体是将Javascript置于CDATA
标记内,原因相同。