首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将javascript和页面属性用于jQuery和javascript

将javascript和页面属性用于jQuery和javascript
EN

Stack Overflow用户
提问于 2010-10-22 21:40:51
回答 2查看 2.1K关注 0票数 1

目前,我正在使用java servlet设置Hashmap、列表和业务对象范围,然后通过request.setAttribute("myMap", myMap);将它们传递给jsp页面。

如何在javascript/jquery中直接访问这些数据?语法是什么?

目前,我正在使用jstl和EL表达式遍历数据并设置dom元素的值。

代码语言:javascript
复制
<c:forEach var="entry" items="${myMap}">
<input type="hidden" class="myClass" value='<c:out value="${entry.value}" />' />
</c:forEach>

然后我使用javascript/jquery来访问这些DOM元素。

代码语言:javascript
复制
$(".myClass").eq(1).val()
$(".myClass").eq(2).val()

我是否可以使用javascript/jQuery直接访问在servlet中设置的页面属性,而无需首先创建dom元素?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-22 21:43:55

我宁愿将其转储到javascript关联数组中:

代码语言:javascript
复制
<script type="text/javascript">
    var map = new Array();
    <c:forEach ... >
       map['${entry.key}'] = '${entry.value}';
    </c:forEach>
</script>
票数 2
EN

Stack Overflow用户

发布于 2010-10-22 22:05:25

需要注意的是,在使用JSP生成Javascript时,您必须担心的一件事是,没有提供开箱即用的工具来“清理”该上下文的文本。具体来说,在此示例中,如果要将${entry.value}放入Javascript字符串中:

代码语言:javascript
复制
var someValue = '${entry.value}';

然后,您必须确保该值将被正确解析为Javascript字符串。肯定不会起作用的是:

代码语言:javascript
复制
var someValue = '${fn:escapeXml(entry.value)}';

为什么不行?因为fn:escapeXml()是用来过滤字符串的,所以解析器在字符串中看不到任何元字符。XML和HTML有其自身的敏感性,它们只是与Javascript的语法完全不同。例如,Javascript字符串常量中的“与”符号就是一个“与”符号。然而,在我们的示例中,如果${entry.value}是您的爱尔兰叔叔的名字,那么在扩展时,我们将拥有:

代码语言:javascript
复制
var someValue = 'John O'Hara';

这是一个Javascript语法错误。

据我所知,JSTL/EL还没有标准化的JSON转换器。获取众多JSON工具包中的一个(都有自己的优缺点)并将其连接到您自己的EL函数是解决此问题的一种方法。另一种更简单的方法是编写您自己的fn:escapeXml()变体,目的是“转义”Javascript字符串。它应该考虑引号字符、特殊控制字符系列(如换行符和退格符)、反斜杠字符和7位范围之外的Unicode字符。有了这样的东西,你就可以安全地写:

代码语言:javascript
复制
var someValue = '${yourTld:escapeJS(entry.value)}';

并确信生成的文本将如下所示:

代码语言:javascript
复制
var someValue = 'John O\'Hara';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3997348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档