【发布时间】:2015-01-10 19:10:15
【问题描述】:
我正在从 Mysql 数据库中检索行并将每一行作为一个对象存储在列表中。 我将列表传递给请求范围,在此我尝试使用 JSTL 循环列表并访问对象变量。
这是我将行作为对象检索的方式:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
// get list of objects
List<Game> gameRatingsThisWeek = getHighestRatedGameThisWeek();
request.setAttribute("gameRatingsThisWeek", gameRatingsThisWeek);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/dashboard.jsp");
rd.forward(request, response);
private List<Game> getHighestRatedGameThisWeek() {
List<Game> list = new ArrayList<Game>();
try(Connection con = ds.getConnection()){
String query = "SELECT overallRating, count(*) as Total, g.name"
+"FROM gameSurvey gs, game g"
+"WHERE g.id = gs.gameID AND"
+"date BETWEEN (NOW() - INTERVAL 7 DAY) AND NOW()"
+"GROUP by overallRating"
+"ORDER by Total desc";
PreparedStatement ps = con.prepareStatement(query);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Game game = new Game();
game.setName(rs.getString("name"));
game.setRating(rs.getInt("overallRating"));
game.setTotal(rs.getInt("Total"));
list.add(game);
}
ps.close();
}catch(SQLException e){}
return list;
}
}
我知道 SQL 查询没问题,因为我之前测试过。
这是游戏类:
public class Game {
private int rating, total;
private String name;
// get
public int getRating(){
return rating;
}
public int getTotal(){
return total;
}
public String getName(){
return name;
}
// set
public void setRating(int rating){
this.rating = rating;
}
public void setTotal(int total){
this.total = total;
}
public void setName(String name){
this.name = name;
}
}
在dashboard.jsp 文件中,我尝试遍历列表:
<c:forEach items="${gameRatingsThisWeek}" var="game">
<c:out value="${game.name}"></c:out>
</c:forEach>
我导航到检索并转发到 .jsp 页面的 servlet。但是没有任何内容输出到网页。
【问题讨论】:
-
你测试过你的list不为空吗?尝试在转发之前检查。
-
请问如何检查?我不熟悉在 Eclipse 中调试以查看变量值。
-
在 doGet 开始处添加断点,并在 gameRatingsThisWeek 上添加监视。为此,在调试模式下右键单击变量,然后单击“添加观察”。或者,只需在列表中添加一个 sysout(但先尝试调试器)。
-
啊,我明白了,谢谢。显然,正如您所建议的那样,该列表是空的。我不明白为什么会这样。
-
您的查询是串联的字符串文字,每行的末尾应该有空格。没有它们,您的 SQL 语句就会损坏。
标签: java mysql jsp servlets jstl