2009-11-04 41 views
0

我正在研究從數據庫中的記錄中檢索某些HTML代碼的應用程序。該字符串然後被採取並插入特定的div內。現在我通過從Java中傳遞變量並將其打印到JSP中的div中來完成此操作。現在我試圖使用外部jQuery函數來完成這個任務,並且我正在努力如何將這個字符串傳遞給jQuery函數。將HTML字符串傳遞給jQuery函數

我想是這樣的:

<script> 
var message = <%=message %>; 
</script> 
<script src="files/js.js" type="text/javascript"></script> 

但它似乎無法解釋VAR一旦碰到外部函數(我嘗試使用StringEscapeUtils但這並沒有解決這個問題)。

+0

'message'有什麼輸出?從技術上講,這應該工作。 – Bartek 2009-11-04 20:01:22

+0

我推薦在scriptlet上面使用taglibs/EL。例如。 var message ='$ {message}';在現實世界中使用scriptlet是不鼓勵的。 – BalusC 2009-11-04 20:16:50

回答

4

嘗試:

var message = '<%= message %>'; 
+0

+1:另請參閱http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html獲取更多技術說明。 – BalusC 2009-11-04 20:07:38

+1

這工作,我只需事先使用StringEscapeUtils.escapeJavaScript – 2009-11-04 20:41:44

+0

如果它純粹是爲了逃避撇號,你也可以使用$ {fn:replace(message,「'」,「\\'」)}。如果你也想轉義HTML實體,一個就足夠了。但好的,只需選擇你喜歡的東西:) – BalusC 2009-11-04 20:47:03

0
var message = '<%=message %>'; 
$(message); // we have a jQuery object with a property 
      // for each html element in the message string! 
0

當你遇到這樣的問題,查看網頁的源代碼。 message如何呈現?我的猜測可能是

var message = Passing an HTML string to jQuery function; 

這是無效的。將代碼包含在遠程代碼中可以解決這種情況。

var message = '<%= message %>'; 

我平時也把全局對象這樣的窗口對象上,以便更容易找到

window.message = '<%= message %>'; 
+0

而不是以後你也可以使用$ .message。 – BalusC 2009-11-04 20:23:15

+0

我從來沒有想過把對象放在jQuery對象上。有趣的是,你只需要確保jQuery在你自己的javascript之前加載。 – Bob 2009-11-04 20:25:10

0
var message= <%= message %>; 

你不僅需要把一些引號的消息文本,您也需要適當地爲JavaScript字符串文字轉義它。否則,該消息中的引用將會破壞它,並可能會導致跨站腳本攻擊。

var message= '<%= message.replaceAll("\\\\", "\\\\\\\\").replaceAll("'", "\\\\'") %>'; 

認爲這是反斜槓權數,但Java的String的相互作用文字反斜槓和正則表達式的反斜槓氣球出來的所有理智的。如果需要包含這些代碼,控制代碼(如新行)也需要轉義。

總而言之,最好將任務交給JSON編碼庫,它將正確輸出各種JavaScript類型,而不僅僅是字符串。例如。用json-simple:

var message= <%= JSONValue.toJSONString(message) %>;