【问题标题】:How to access the session names stored as array?如何访问存储为数组的会话名称?
【发布时间】:2014-02-03 10:47:09
【问题描述】:

在我的 servlet 中,我按如下方式存储了会话变量,

for(int i=0;i>pageNames.length;i++) {
        session.setAttribute("pageNames["+i+"]",pageNames[i]);
    }

现在我从 JSP 页面创建了一个 javascript 函数,如下所示,

   for(var i=0;i<10;i++) {                            
        var pageNames = '<%=session.getAttribute("pageNames["+i+"]")%>';
        alert(pageNames);
}

但是当我执行代码时出现错误提示,未知变量 'i' is dispalyed inside

var pageNames = '<%=session.getAttribute("pageNames["+i+"]")%>';

当我在定义了 'var i' 的 for 循环中编写它时,这怎么可能呢? 谁能告诉我如何从我的 javascript 访问存储为 'pageNames[0],pageNames[1],pageNames[2].......' 的会话变量??? 提前致谢。

【问题讨论】:

    标签: javascript jsp session jakarta-ee servlets


    【解决方案1】:

    由于声誉低,我无法评论您的帖子,因此我正在写这篇文章。

    session 用于在服务器上存储用户相关数据,以便我们的服务器能够记住用户。 JSP 是客户端,因此会话将不可用。

    为什么不在 java 页面中使用 request.setAttribute 并在 JSP 上使用 request.getAttribute 方法访问它。

    【讨论】:

      【解决方案2】:

      您正在混合两个世界 - javascript 和 jsp。必须先将带有您的 javascript 代码的 JSP 翻译成 java servlet。但是 java servlet 不知道 javascript 循环。 JSP 在 javascript 被识别之前被解释,所以你不能使用循环变量i

      我的建议是首先从 JSP 中准备一组页面名称,然后在 javascript 中对其进行迭代。是这样的:

      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
      <script>
          var pageNames = new Array(
          <c:forEach var="i" begin="1" end="10" varStatus="status">
              <c:set var="pageIndex">pageNames[${i}]</c:forEach>
              "${sessionScope[pageIndex]}"
              <c:if test="${!status.last}" >,  </c:if> 
          </c:forEach>);
      
          for(var i=0;i<pageNames.length;i++) {                            
              alert(pageNames[i]);
          }
      </script>
      

      无论如何,更好的方法是将整个页面名称列表存储到会话中并遍历存储的列表。

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 2014-02-02
        • 2021-08-06
        • 2012-08-17
        • 1970-01-01
        • 2020-08-26
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多