有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从javascript中访问会话中存储的数组变量?

我有一个servlet,在其中我在会话范围内存储了一个数组,如下所示

session.setAttribute("pageNames",pageNames);

现在,这个servlet将控件传输到一个JSP页面,该页面在加载时调用函数“getPage()”,如下所示:

<body  id="qwer" onload="getPage('<%=(String[])session.getAttribute("pageNames")%>'>

“getPage()”的javascript代码如下所示

function getPage(pageNamesArray)
                {
                  var ele = document.getElementById('app');

                    for(var i=0;i<10;i++)
                    {
                      var imageLabel = document.createElement("label");
                        imageLabel.innerHTML = pageNamesArray[i];
                        ele.appendChild(imageLabel);
                    }
                }

我希望我会从我存储在会话中的“pageNames”数组中获取前10个值的名称,但我会得到以下输出

[Ljava.lang.String;@17a8未定义未定义

我在servlet中测试了代码,发现数组“pageNames”中填充了40多个值

有谁能建议我如何从 JSP页面? 提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    您的方法是正确的,但这不是打印数组元素的方式。您必须在阵列中循环并输出组件

    为了保持整洁,您可以创建另一个javascript函数,如:

    function getPageNames() {
      var pageNamesArray = [
      <c:forEach var="p" items="${sessionScope.pageNames}" varStatus="status">
        ${status.first ? '' : ','} "${p}"
      </c:forEach>
      ];
    
      return pageNamesArray;
    }
    

    然后有:

    <body  id="qwer" onload="getPage(getPageNames())">
    

    我在上面做的是用页面名创建一个Javascript数组,输出如下:

    function getPageNames() {
      var pageNamesArray = [
        "page1"
        ,"page2"
        ,"etc"
      ];
    
      return pageNamesArray;
    }
    

    我用JSTL来做这个,但是你也可以用scriptlet。这个想法是在阵列中循环