Board logo

标题: 遇到的问题----js获取java的数组(1) [打印本页]

作者: look_w    时间: 2019-5-11 11:43     标题: 遇到的问题----js获取java的数组(1)

但js中是不能直接使用java后端传值的数组的。


有两个解决方法:

1.ajax请求返回数组,这种方式返回的数组是直接能使用的。这里就不详说了。

2.把java的数组转换成 js数组。  本章主要讲解这种方式。



JS中遍历一个EL表达式的集合为空原因

el表达式生效的时候javascript代码还全都是文本 等javascript生效的时候早就没了el表达式了。


js是客户端执行,EL是在服务端执行,而服务端比客户端先执行,所以你不能用js来改变已经执行的el表达式的值

但是却可以用el来给js初始化传值。

也就是不能再在js的逻辑代码中再去获取EL表达式,只能在js的逻辑代码中把EL表达式的输出 当成文本。


如果JS脚本不是在JSP页面里而是在单独的JS文件里,这时用EL初始传值是不起作用的,但你可以通过window.onload()来得到EL的值再传送给JS文件里的方法进行变量初始化



js获取java数组的长度

所以我们发现在jsp中生效的 ${strs.length}是不生效的。

只能通过fn函数

页面引入<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

${fn:length(strs)} 可在js中获取java数组的长度。



把java的数组转换成 js数组

把java数组转换成js数组的原理是创建一个js数组然后把java数组中的值取出放进去。

我们现在有一个costList数组,格式是String[]

现在新建一个 list1的js数组Array 来获取  costList数组的值。


有如下几种方法:
使用c标签EL表达式在创建js数组时拼接

var list1 = new Array(
5.0,3.0,4.0,5.0,4.0,4.0,5.0,4.0,5.0
)

构造出这样的js代码就行。

    function initSit()
    {
    var list1 = new Array(
    <c:forEach items="${costList}" begin="0" end="0" var="cost">${cost}</c:forEach>
    <c:forEach items="${costList}" begin="1"  var="cost">,${cost}</c:forEach>
    )
    //这里是属于js的部分
    var i=0;
    for(;i<list1.length ;i++)
    {
    alert(list1[i]);
     
     
    }
    }
    initSit();




使用java脚本在创建js数组时拼接

    function initSit()
        {
    var list1 = new Array(
    <%
     
    String[] costList = (String[])request.getAttribute("costList");
    //使用java脚本来输出数字
    //数组是costList[0],List则是costList.get(0)
    out.print(costList[0]);
    //这里这么写很重要...只有这样才能个js的 Array对象正确赋值
    for(int i=1; i<costList.length; i++)
    {
    out.print(",");
    out.print(costList[i]);
    }
    //java脚本部分结束
    %>
     
    )
     
    //这里是属于js的部分
    var i=0;
    for(;i<list1.length ;i++)
    {
    alert(list1[i]);
     
    }
    }
     
    initSit();




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0