代码之家  ›  专栏  ›  技术社区  ›  NimChimpsky

在jQuery和javascript中使用java servlets和页面属性

  •  1
  • NimChimpsky  · 技术社区  · 14 年前

    目前,我使用java servlets来设置哈希图、列表和业务对象范围,然后通过 request.setAttribute("myMap", myMap);

    如何在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元素?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Bozho    14 年前

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

    <script type="text/javascript">
        var map = new Array();
        <c:forEach ... >
           map['${entry.key}'] = '${entry.value}';
        </c:forEach>
    </script>
    
        2
  •  0
  •   Pointy    14 年前

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

    var someValue = '${entry.value}';
    

    然后,必须确保将值正确解析为Javascript字符串。肯定行不通的是:

    var someValue = '${fn:escapeXml(entry.value)}';
    

    fn:escapeXml() 是关于清理字符串,以便XML或HTML解析器不会在字符串中看到任何元字符。XML和HTML有自己的敏感性,它们与Javascript的语法完全不同。例如,Javascript字符串常量中的与号只是一个与号。然而,在我们的例子中,如果 是你的爱尔兰叔叔的名字,那么在扩展后我们会有:

    var someValue = 'John O'Hara';
    

    这是一个Javascript语法错误。

    据我所知,JSTL/EL还没有标准化的JSON转换器。抓住其中一个可用的JSON工具包(都有自己的优缺点)并将其连接到自己的EL函数是解决这个问题的一种方法。另一种更简单的方法是编写自己的 为了“转义”Javascript字符串。它应该担心引号字符、特殊控制字符系列(如换行符和反空格)、反斜杠字符和7位范围外的Unicode字符。有了这样的东西,你可以放心地写:

    var someValue = '${yourTld:escapeJS(entry.value)}';
    

    var someValue = 'John O\'Hara';