目前,我正在使用java servlet设置Hashmap、列表和业务对象范围,然后通过request.setAttribute("myMap", myMap);将它们传递给jsp页面。
如何在javascript/jquery中直接访问这些数据?语法是什么?
目前,我正在使用jstl和EL表达式遍历数据并设置dom元素的值。
<c:forEach var="entry" items="${myMap}">
<input type="hidden" class="myClass" value='<c:out value="${entry.value}" />' />
</c:forEach>然后我使用javascript/jquery来访问这些DOM元素。
$(".myClass").eq(1).val()
$(".myClass").eq(2).val()我是否可以使用javascript/jQuery直接访问在servlet中设置的页面属性,而无需首先创建dom元素?
发布于 2010-10-22 21:43:55
我宁愿将其转储到javascript关联数组中:
<script type="text/javascript">
var map = new Array();
<c:forEach ... >
map['${entry.key}'] = '${entry.value}';
</c:forEach>
</script>发布于 2010-10-22 22:05:25
需要注意的是,在使用JSP生成Javascript时,您必须担心的一件事是,没有提供开箱即用的工具来“清理”该上下文的文本。具体来说,在此示例中,如果要将${entry.value}放入Javascript字符串中:
var someValue = '${entry.value}';然后,您必须确保该值将被正确解析为Javascript字符串。肯定不会起作用的是:
var someValue = '${fn:escapeXml(entry.value)}';为什么不行?因为fn:escapeXml()是用来过滤字符串的,所以解析器在字符串中看不到任何元字符。XML和HTML有其自身的敏感性,它们只是与Javascript的语法完全不同。例如,Javascript字符串常量中的“与”符号就是一个“与”符号。然而,在我们的示例中,如果${entry.value}是您的爱尔兰叔叔的名字,那么在扩展时,我们将拥有:
var someValue = 'John O'Hara';这是一个Javascript语法错误。
据我所知,JSTL/EL还没有标准化的JSON转换器。获取众多JSON工具包中的一个(都有自己的优缺点)并将其连接到您自己的EL函数是解决此问题的一种方法。另一种更简单的方法是编写您自己的fn:escapeXml()变体,目的是“转义”Javascript字符串。它应该考虑引号字符、特殊控制字符系列(如换行符和退格符)、反斜杠字符和7位范围之外的Unicode字符。有了这样的东西,你就可以安全地写:
var someValue = '${yourTld:escapeJS(entry.value)}';并确信生成的文本将如下所示:
var someValue = 'John O\'Hara';https://stackoverflow.com/questions/3997348
复制相似问题