2009-11-04 127 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) %>;