我正在开展一个大学项目,存储各种学习资料的链接。我的数据库中有一个指向文本教程的链接列表,项目的文件如下:
TextTutorialController.java:
package io.spring.learn.web;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import io.spring.learn.proc.TextTutorial;
import io.spring.learn.proc.TextTutorialService;
@Controller
@RequestMapping("/textTutorials")
public class TextTutorialController {
@Inject
TextTutorialService service;
@RequestMapping(value = "/listOfTextTutorials", method = RequestMethod.GET)
public String showList(ModelMap model) {
List<TextTutorial> listOfTextTutorials = service.findAll();
model.addAttribute("textTutorialList", listOfTextTutorials);
return "listOfTextTutorials";
}
}
listOfTextTutorials.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="s" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>List of Text Tutorials</title>
</head>
<body>
<h1>List of Text Tutorials on Spring:</h1>
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>URL</th>
<th>Alexa Global Rank</th>
<th>Total Chapters</th>
<th>% Completed</th>
</tr>
<c:forEach var="textTutorial" items="${textTutorialList}">
<tr>
<td><c:out value="${textTutorial.id}" /></td>
<td><c:out value="${textTutorial.name}" /></td>
<td><c:out value="${textTutorial.url}" /></td>
<td><c:out value="${textTutorial.alexaGlobalRank}" /></td>
<td><c:out value="${textTutorial.totalChapters}" /></td>
<td><c:out value="${textTutorial.percentCompleted}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
的index.jsp:
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
<meta charset="utf-8">
<title>Welcome</title>
</head>
<body>
<a href="textTutorials/listOfTextTutorials.html">List of Text Tutorials on Spring</a>
</body>
</html>
在Tomcat上运行应用程序后,控制台显示数据库连接正常,甚至查询了一些SELECT语句:
[EL Info]: 2016-06-29 03:29:17.721--ServerSession(2113257970)--EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507-3faac2b
[EL Info]: connection: 2016-06-29 03:29:18.265--ServerSession(2113257970)--file:/Users/AgentDen/Documents/Java/MyProjectSpringMVC/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/LearnSpringMVC/WEB-INF/classes/_LearnSpring login successful
[EL Fine]: sql: 2016-06-29 03:29:18.314--ServerSession(2113257970)--Connection(302754878)--SELECT ID FROM books WHERE ID <> ID
[EL Fine]: sql: 2016-06-29 03:29:18.842--ServerSession(2113257970)--Connection(500719466)--SELECT ID FROM CLASSROOM WHERE ID <> ID
[EL Fine]: sql: 2016-06-29 03:29:18.886--ServerSession(2113257970)--Connection(1612903660)--SELECT ID FROM general_articles WHERE ID <> ID
[EL Fine]: sql: 2016-06-29 03:29:18.905--ServerSession(2113257970)--Connection(250314644)--SELECT ID FROM online_courses WHERE ID <> ID
[EL Fine]: sql: 2016-06-29 03:29:18.922--ServerSession(2113257970)--Connection(474813894)--SELECT ID FROM text_tutorials WHERE ID <> ID
[EL Fine]: sql: 2016-06-29 03:29:18.936--ServerSession(2113257970)--Connection(1688125903)--SELECT ID FROM youtube_tutorials WHERE ID <> ID
[EL Fine]: sql: 2016-06-29 03:29:19.619--ServerSession(2113257970)--Connection(585968463)--SELECT ID, alexa_global_rank, chapters_studied, date_finished, date_started, days_spent, LANGUAGE, LEVEL, NAME, percent_completed, personal_rating, total_chapters, URL FROM text_tutorials
但是我的jsp中显示的所有内容都只是html标题和表头,但是模型中没有显示数据:
List of Text Tutorials on Spring:
ID Name URL Alexa Global Rank Total Chapters % Completed
JSTL包含在pom.xml中:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
我在这里读过类似的问题,但似乎没有一个特定于我的案例。我已经非常绝望了,所以任何建议都会受到高度赞赏!
UPD。 以下是服务的findAll()方法的实现:
package io.spring.learn.proc;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import org.springframework.stereotype.Repository;
@Repository
public class TextTutorialDaoImpl implements TextTutorialDao {
@PersistenceContext
private EntityManager em;
@Override
public List<TextTutorial> findAll() {
TypedQuery<TextTutorial> query = em.createQuery("Select txt from TextTutorial txt", TextTutorial.class);
return query.getResultList();
}
...
}
和服务实施:
package io.spring.learn.proc;
import java.util.List;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@Named
public class TextTutorialServiceImpl implements TextTutorialService {
@Inject
private TextTutorialDao txtDao;
@Override
public List<TextTutorial> findAll() {
return txtDao.findAll();
}
...
}
答案 0 :(得分:1)
您的代码看起来不错。我唯一可以怀疑的是你的服务 - 我相信它会返回一个空列表。在将其添加到模型图之前,您可以打印出列表的大小吗?
public String showList(ModelMap model) {
List<TextTutorial> listOfTextTutorials = service.findAll();
System.out.println(listOfTextTutorials.size()); // <-- This line.
model.addAttribute("textTutorialList", listOfTextTutorials);
return "listOfTextTutorials";
}
答案 1 :(得分:0)
如何将控制器方法更改为此?
@RequestMapping(value = "/listOfTextTutorials", method = RequestMethod.GET)
public ModelAndView showList(ModelMap model) {
List<TextTutorial> listOfTextTutorials = service.findAll();
return new ModelAndView("listOfTextTutorials", "textTutorialList", listOfTextTutorials);;
}
对于旧的JSP 1.2描述符,您必须手动启用EL
。在JSP中添加以下代码。
<%@ page isELIgnored="false" %>
答案 2 :(得分:0)
好的,感谢@Nguyen Tuan Anh的建议,检查从服务返回的List的大小我开始挖掘并意识到Spring与DB的连接在某种程度上已经被破坏了。将application-config.xml
中的数据库网址从相对位置更改为绝对值已解决了该问题,但我仍然无法确定为什么相对路径返回零结果。