【问题标题】:How to access the array variables stored in session from within the javascript?如何从 javascript 中访问存储在会话中的数组变量?
【发布时间】:2014-02-02 23:16:47
【问题描述】:

我有一个 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;@17a8undefinedundefinedundefined

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

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

【问题讨论】:

  • JSP 是一种服务器端技术。它呈现作为 HTTP 响应正文发送的 HTML。 Javascript 是一种客户端技术,通常在浏览器中执行 HTML 中包含的脚本。
  • @SotiriosDelimanolis 那么如何从 jsp 页面访问数组?
  • 您必须将数组的内容序列化为可以在 javascript 中表达和解析的格式(可能是 JSON)。

标签: java javascript jsp jakarta-ee servlets


【解决方案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。这个想法是遍历数组。

【讨论】:

  • 嘿,谢谢您的回答,但是当我粘贴您的代码时,似乎没有打印任何内容。我使用“alert()”检查了“getPageNames()”和“getPage()”函数从未被调用过。我写了我的getPage()函数如下,函数getPage(pageNamesArray) {.......}
  • 我注释了所有代码,只在两个函数中保留了“alert()”,现在显示了 alert()。
  • 实际上我采用了一种新方法,其中我没有使用 javascript,所以我在我的 JSP 代码中使用了 'pageNames' 数组来获得所需的结果。但是感谢您的任何帮助,我了解到我们可以通过您在函数中包含一个函数,例如 'function fun1(fun2())'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 2011-12-29
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多