2013-03-18 31 views
0

我在呈現自定義JSF組件。在方法encodeBegin我想包括一些Java腳本。自定義JSF組件:在「腳本」中使用「startElement」會導致評論

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> 

任何人都可以解釋爲什麼這個評論出現,我怎麼擺脫它?

在此先感謝!

回答

2

這是專門針對MyFaces實現的,而不是針對JSF規範的。Mojarra的實現沒有這樣做

這種將JavaScript正文放入HTML註釋的方法基本上是HTML prehistory back的剩餘時間存在不支持<script>元素的存在。這些HTML註釋基本隱藏了JavaScript內容,以防止那些古老的HTML解析器解釋並顯示JavaScript代碼,如純文本

Mozilla Developer Network - Writing JavaScript for XHTML參見:

在HTML這是常見的做法,以隱藏瀏覽器不能夠JS的腳本。在XML評論時代,他們的意圖是:評論。在處理文件之前,所有評論都將從文檔中刪除,因此將腳本放在文檔中就像是將你的午餐投入Piranha池中。此外,評論你的腳本沒有意義 - 在過去的十年中,沒有任何一款瀏覽器會在頁面上顯示你的代碼。

注意最後一句話,這是非常真實的,在過去的十年中沒有任何一款瀏覽器能夠做到這一點。 MyFaces顯然有點過分地假設現在仍然會使用這樣的史前瀏覽器。

+0

感謝林,BalusC。我沒有意識到這一點。 – padmalcom 2013-03-18 13:42:55

+0

還有一個Web上下文參數來控制這一點: http://myfaces.apache.org/core20/myfaces-impl/webconfig.html#org_apache_myfaces_WRAP_SCRIPT_CONTENT_WITH_XML_COMMENT_TAG 說明: 包裹裏面的內容腳本XML註釋,以防止舊的瀏覽器顯示它。默認情況下它是真的。 – peater 2014-04-07 21:03:05

1

這是確定

的做法是標記的JavaScript代碼註釋,所以自動工具不嘗試分析它的HTML(例如,檢查你的網頁是HTML 4兼容的工具)。

JavaScript引擎會忽略HTML註釋和處理代碼(JavaScript註釋是/*//

這種方法是把JavaScript的一個CDATA標籤內,出於同樣的原因的變化。

+0

感謝您的解釋,所以我會留下醜陋的! :) – padmalcom 2013-03-18 12:48:58

+0

這實在與自動工具無關。如果一個工具做到了,它將成爲一個古老的工具或者工具中的一個bug。 – BalusC 2013-03-18 13:11:51