[英][Ljava.lang.Object; cannot be cast to List from a request SQL
我在 jsp 中查看带有 ForEach 的 List 有问题:
我对时间线servlet有这个错误:
Etat HTTP 500 - [Ljava.lang.Object; cannot be cast to fr.gabbler.models.Gabs
type Rapport d''exception
message [Ljava.lang.Object; cannot be cast to fr.gabbler.models.Gabs
description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.
exception
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to fr.gabbler.models.Gabs
fr.gabbler.servlet.TimelineServlet.doGet(TimelineServlet.java:32)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
时间线servlet.java
package fr.gabbler.servlet;
import java.io.IOException;
import java.util.List;
import javassist.expr.NewArray;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.jasper.tagplugins.jstl.core.ForEach;
import fr.gabbler.dao.GabDao;
import fr.gabbler.models.Gabs;
import fr.gabbler.models.User;
@WebServlet("/timeline")
public class TimelineServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String user = (String) req.getSession().getAttribute("username");
GabDao gd = new GabDao();
List<Gabs> gabs = gd.getListGabs(user);
//Line which is generating the error
gabs.get(1).getContent();
req.setAttribute("gabs", gabs);
req.getRequestDispatcher("/timeline.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doPost(req, resp);
}
}
在位于 gabdao 的 servlet 中调用的函数:
public List<Gabs> getListGabs(String username){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-pu");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
userDao user = new userDao();
int id = user.idFindByUsername(username);
Query query = em.createQuery("select DISTINCT Id, content from Gabs as g where g.idUser = (select DISTINCT Id from User as u where u.Id = (select DISTINCT idFollowed from Follow as f where f.idFollower = :id ) )");
query.setParameter("id", id );
List<Gabs> gabs = (List<Gabs>) query.getResultList();
return gabs;
}
在timeline.jsp 中,我有这个列表的代码,而没有timelineservlet 中的那一行,它会这样做:
Etat HTTP 500 - java.lang.NumberFormatException: For input string: "content"
<c:forEach items="${gabs}" var="t">
<div class="container">
<div id="gabs">
${t.content }
</div>
</div>
</c:forEach>
就是这样,列表有 2 个元素,gabs.size() 有效
我在网上搜索过,但没有找到任何可以帮助我的东西,这可能是因为列表的类型类似于 List 但 gabs 的类型是 List 所以我不知道
谢谢帮助我:)
错误及其发生的行意味着您的Query
正在返回List<Object[]>
- 引发错误的行是您实际尝试使用向下转换的List
的值的第一个地方。
您从查询中获取一个数组,因为您的 SELECT 语句 根据规范有两列( Id, content
)。 假设Id
是主键, content
是 Gabs 上的一个字段,您可能只想要
SELECT g from Gabs as g WHERE ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.