我有以下问题。
在实现 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中
为什么呢?我该如何解决这个问题?
答案 0 :(得分:1)
您已将object
存储在session
中,但您是从request
HttpSession session = req.getSession(false);
SalDettaglio[]= (SalDettaglio) session.getAttribute("salDettaglio");
您还需要使用request#getAttribute
。见Difference between getAttribute() and getParameter()。
另一方面,您可以使用简单的EL
表达式来访问request
和session
范围内的元素,
${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 -->