簡體   English   中英

如何從JSP頁面檢索會話中放置的數組?

[英]How can I retrieve an array put in session from a JSP page?

我有以下問題。

在實現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

為什么? 我該如何解決這個問題?

您已將object存儲在session ,但是您正在從request中訪問它

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

另外,您需要使用request#getAttribute 請參見getAttribute()和getParameter()之間的區別

另一方面,您可以使用簡單的EL表達式來訪問requestsession范圍中的元素,

 ${sessionScope.salDettaglio}

在過去的幾十年中,使用scriptlet被認為是不好的做法。 看一下如何避免JSP文件中的Java代碼?

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

您需要使用像:

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

或者您可以直接使用類似以下的內容:

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

或者,您甚至可以使用core out的EL進行打印,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM