【问题标题】:How can I retrieve an array put in session from a JSP page?如何从 JSP 页面检索放入会话中的数组?
【发布时间】:2015-01-24 13:20:47
【问题描述】:

我有以下问题。

在实现 HttpServlet 接口的自定义 servlet 的 service() 方法中,我将自定义对象的 array 放入 >会话,这样:

// The collection that have to be shown in a table inside the JSP view:
SalDettaglio[] salDettaglio = this.getSalDettaglioList();

HttpSession session = req.getSession(false);
session.setAttribute("salDettaglio", salDettaglio);

然后我想将这个数组 salDettaglio 检索到我的 JSP 页面中。所以我正在尝试做这样的事情:

<%@ page import="com.myproject.xmlns.EDILM.SalReport.SalDettaglio" %>
<!-- showSalwf.jsp -->
<html>
<head>
</head>
<body>

<%
    out.println("TEST SALWF");

    SalDettaglio[] salDettaglio = request.getParameter("salDettaglio");

%>

</body>
</html>

问题是这一行出现错误:

SalDettaglio[] salDettaglio = request.getParameter("salDettaglio");

IDE 对我说:

不兼容的类型。必需的: com.myproject.xmlns.EDILM.SalReport.SalDettaglio[] 找到: java.lang.String

为什么?我该如何解决这个问题?

【问题讨论】:

    标签: java jsp session jakarta-ee servlets


    【解决方案1】:

    您已将object 存储在session 中,但您正在从request 访问它

    HttpSession session = req.getSession(false);
    SalDettaglio[]= (SalDettaglio) session.getAttribute("salDettaglio");
    

    您还需要使用request#getAttribute。见Difference between getAttribute() and getParameter()

    另一方面,您可以使用简单的EL 表达式来访问requestsession 范围内的元素,

     ${sessionScope.salDettaglio}
    

    几十年来,使用 scriptlet 被认为是一种不好的做法。看看How to avoid Java code in JSP files?

    【讨论】:

      【解决方案2】:

      你需要使用like:

      (SalDettaglio[]) request.getSession(false).getAttribute("salDettaglio");
      

      或者你可以直接使用类似的东西:

      <h4>${salDettaglio}</h4> <!-- if its a string say for example -->
      

      或者您甚至可以使用核心的输出 EL 进行打印,例如:

      <c:out value="${sessionScope.salDettaglio}"/> <!-- which again would be useless as its an array -->
      

      【讨论】:

        【解决方案3】:

        您可以使用EL,这是JSP中的首选。

        <c:out value="${sessionScope.salDettaglio}"/>
        

        或者如果名称值是 HTML 安全的,你可以使用

        ${sessionScope.salDettaglio}
        

        确保 JSP 是允许访问会话。

        <%@ page session="true" %>
        

        要使用核心 JSTL,请确保包含以下代码。

        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-16
          • 1970-01-01
          • 1970-01-01
          • 2013-06-08
          • 1970-01-01
          • 2015-12-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多