[英][Ljava.lang.Object; cannot be cast to List from a request SQL
I have a problem for the view of a List with a ForEach in a jsp:我在 jsp 中查看带有 ForEach 的 List 有问题:
I have this error for the timelineservlet:我对时间线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)
timelineservlet.java时间线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);
}
}
The function called in the servlet located in gabdao :在位于 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;
}
In the timeline.jsp i have this code for the List, and without the line in the timelineservlet it does that :在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>
There it is, The list have 2 elements, the gabs.size() works就是这样,列表有 2 个元素,gabs.size() 有效
i have searched on the web but i didn't find anything that can help me , that's maybe because the list is typed like List but gabs is typed List so i don"t know我在网上搜索过,但没有找到任何可以帮助我的东西,这可能是因为列表的类型类似于 List 但 gabs 的类型是 List 所以我不知道
Thank's helping me :)谢谢帮助我:)
The error and the line it's occurring on mean that your Query
is returning a List<Object[]>
- the line that's throwing the error is the first place you actually try and use a value from the List
which you downcast.错误及其发生的行意味着您的
Query
正在返回List<Object[]>
- 引发错误的行是您实际尝试使用向下转换的List
的值的第一个地方。
You're getting an array from your query because your SELECT statement has two columns ( Id, content
) per the spec .您从查询中获取一个数组,因为您的 SELECT 语句 根据规范有两列(
Id, content
)。 Assuming that Id
is a primary key and content
is a field on Gabs, you probably just want假设
Id
是主键, content
是 Gabs 上的一个字段,您可能只想要
SELECT g from Gabs as g WHERE ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.