运行时没有错误,测试输出到控制台会返回正确的数据但是当我尝试在jsp中显示相同的数据时,没有显示任何内容?可能是非常简单的东西,我是Spring和jsp的新手。
以下是我的jsp和DAO文件:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@page import="com.sga.app.dao.DisplayStatsDAO" %>
<%@page import="java.util.*"%>
<!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=ISO-8859-1">
<link href="${pageContext.request.contextPath}/static/css/main.css"
rel="stylesheet" type="text/css">
<title>SGA-user stats</title>
</head>
<body>
<h2 class="displayStatsLeaderboardHeader">Your stats</h2>
<table class="displayStatsTable" border="1">
<tr>
<td class="displayStatsTableData">${stats.returnForename()}</td>
</tr>
</table>
</body>
</html>
package com.sga.app.dao;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.sga.app.beans.UserBean;
@Component("displayStatsDAO")
@Transactional
@Repository
@Configuration
public class DisplayStatsDAO extends HttpServlet implements Serializable {
private static final long serialVersionUID = 1L;
@Autowired
private LocalSessionFactoryBean sessionFactory;
public void setLocalSessionFactoryBean(LocalSessionFactoryBean sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Bean
public DisplayStatsDAO displayStatsDAO() {
return new DisplayStatsDAO();
}
public DisplayStatsDAO() {
}
@Transactional
public String returnForename() {
String returnValue = "";
try {
@SuppressWarnings("deprecation")
Session session = sessionFactory.getConfiguration().buildSessionFactory().getCurrentSession();
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
String userLoggedIn = authentication.getName();
System.out.println(userLoggedIn);
session.beginTransaction();
Criteria criteria = session.createCriteria(UserBean.class);
criteria.add(Restrictions.like("username", userLoggedIn));
List<UserBean> user = (List<UserBean>) criteria.list();
session.getTransaction().commit();
for (UserBean userDetails : user) {
System.out.println("SHOW LOGGED-IN USER");
System.out.println("Username: " + userDetails.getUsername());
System.out.println("Name: " + userDetails.getForename() + ""
+ userDetails.getSurname());
returnValue = userDetails.getForename().toString();
System.out.println(returnValue);
return returnValue;
}
} catch (HibernateException e) {
e.printStackTrace();
}
return returnValue;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher rd = req.getRequestDispatcher("userstats.jsp");
req.setAttribute("stats", returnForename());
rd.forward(req, resp);
}
}
编辑:这是我的控制器/服务类
@Controller
public class DisplayStatsController {
DisplayStatsService statsService;
@Autowired
public void setStatsService(DisplayStatsService statsService) {
this.statsService = statsService;
}
@RequestMapping(value = "/userstats", method = RequestMethod.Get)
public String showUserStatsPage(UserBean user, BindingResult, Model
model) {
if (result.hasErrors()) {
return "error";
}
else {
try {
statsService.showUserStats();
}
catch (Exception e) {
e.printStackTrace();
return "error";
}
}
}
return "userstats";
}
我的服务类:
@Service("displayStatsService")
public class DisplayStatsService {
private DisplayStatsDAO displayStatsDAO;
@Autowired
setDisplayStatsDAO(DisplayStatsDAO displayStatsDAO) {
this.displayStatsDAO = displayStatsDAO;
}
public void showUserStats() {
displayStatsDAO.returnForename();
}
}
日志输出:
DEBUG - Listing entities:
DEBUG - com.sga.app.beans.UserBean{surname=Bates,forename=John,gir=64, homeclub=Bearsden GC, email=john@bt.com, submitCount=18, }
DEBUG - committed JDBC Connection
DEBUG - re-enabling autocommit
SHOW LOGGED-IN USER
Username: John12345
Name: JohnBates
Homeclub: Bearsden GC
John12345
Bearsden GC
John
Outside try/catch clause
Return value is John
DEBUG - Flushing Hibernate Session on transaction synchronization
DEBUG - Processing flush-time cascades
DEBUG - Dirty checking collections
DEBUG - Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
DEBUG - Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
DEBUG - Listing entities:
DEBUG - com.sga.app.beans.UserBean{surname=Bates, username=John12345, forename=John,homeclub=Bearsden GC, email=john@bt.com}
DEBUG - Disconnecting session
DEBUG - Releasing JDBC connection
DEBUG - Released JDBC connection
DEBUG - HHH000163: Logical connection releasing its physical connection
DEBUG - Initiating transaction commit
DEBUG - Committing JDBC transaction on Connection
DEBUG - Returning JDBC Connection to DataSource
DEBUG - Invoking afterPropertiesSet() on bean with name 'userstats'
DEBUG - Rendering view [org.springframework.web.servlet.view.JstlView: name 'userstats'; URL [/WEB-INF/jsps/userstats.jsp]] in DispatcherServlet with name 'dispatcher'
DEBUG - Added model object 'userBean' of type [com.sga.app.beans.UserBean] to request in view with name 'userstats'
DEBUG - Added model object 'org.springframework.validation.BindingResult.userBean' of type [org.springframework.validation.BeanPropertyBindingResult] to request in view with name 'userstats'
DEBUG - Added model object 'username' of type [java.lang.String] to request in view with name 'userstats'
DEBUG - Forwarding to resource [/WEB-INF/jsps/userstats.jsp] in InternalResourceView 'userstats'
DEBUG - Successfully completed request
答案 0 :(得分:1)
使用req.setAttribute("stats", returnForename());
这一行,您要在returnForename()
属性中添加函数stats
的返回值,因此,在视图中您只需访问属性${stats}
。
答案 1 :(得分:1)
这就是我让jsp输出数据的方法。我的Java类中有一个方法可以检索我想要的数据并将其存储在Array中,然后将HttpServletRequest属性设置为此Array。在我的jsp中,我引用此Array,然后通过for循环将Array的每个元素输出到表列。
position : absolute
答案 2 :(得分:0)
我觉得你现在很困惑。 简单来说,Spring MVC就像 -
1.您点击了一个URL,如果该URL与控制器中存在的RequestMapping匹配,则执行将传递给该控制器方法。
2.该控制器调用存在逻辑代码的服务,并使用DAO层.Service层可能返回一些数据。
3.保存的数据是属性并传递给视图(您的jsp文件)。
你正在做的是调用调用服务的控制器,反过来DAO和DAO扩展HttpServlet(完全错误)。
要么使用控制器来调用Dao,要么使用一些扩展HttpServlet的类调用(再次这不是春天来的),你不能同时使用它们。
答案 3 :(得分:0)
将此行添加到您的jsp页面,它将启用EL并显示对象:
<%@ page isELIgnored="false" %>