如何从JSP页面检索放入会话的数组?

时间:2014-11-26 09:22:03

标签: java jsp session java-ee servlets

我有以下问题。

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

// 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中

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

3 个答案:

答案 0 :(得分: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?

答案 1 :(得分:1)

您可以使用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"%>

答案 2 :(得分:1)

您需要使用:

(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 -->