2015-03-05 2 views
1

Ошибки во время выполнения и тестирование вывода на консоль не возвращают корректные данные, но когда я пытаюсь отобразить одни и те же данные в jsp, ничего не отображается? Наверное, что-то действительно простое, я новичок в Spring и jsp.Почему мой 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); 
} 
} 

Edit: вот мой контроллер/сервисные классы

@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 protected], 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 protected]} 
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 
+1

попробовать с '<тд класс = "displayStatsTableData"> $ {Статистика}' – Amogh

+0

@ smoggers, почему вы вернули значение в цикле for? – zawhtut

+0

В файлах журналов есть что-то важное? –

ответ

1

Вот как я получил свой jsp для вывода данных. У меня есть метод в моем классе Java, который извлекает данные, которые я хочу, и сохраняет их в массиве, тогда я устанавливаю атрибут HttpServletRequest для этого массива. В моем jsp я обращаюсь к этому массиву, а затем выводят каждый элемент массива в столбцы таблицы через цикл for.

<!-- Table --> 
<table class="displayStatsTable" border="1"> 
    <tbody class="displayStatsTableBody"> 
     <tr class="displayStatsTableTopRow"> 
      <th><c:out value="Forename" /></th> 
      <th><c:out value="Surname" /></th> 
      <th><c:out value="Average Score" /></th> 
     </tr> 
     <c:forEach var="stats" items="${stats}"> 
     <tr class="displayStatsTableDataRows"> 
      <td class="displayStatsTableData">${stats.forename}</td> 
      <td class="displayStatsTableData">${stats.surname}</td> 
      <td class="displayStatsTableData">${stats.score_avg}</td> 
     </tr>   
     </c:forEach> 
    </tbody> 
</table> 
1

С req.setAttribute("stats", returnForename()); этой строкой вы добавляете возвращаемое значение функции returnForename() в атрибут stats, поэтому вам просто нужно получить доступ к атрибуту ${stats}.

+0

Отметить как ответ, если это правильно и проблема решена. :) – Amogh

+0

Я не согласен с вашим сообщением, но попробовал его и, в конечном счете, до сих пор ничего не отображается на jsp – smoggers

+0

Вы работаете над весной MVC? – Amogh

0

Я думаю, что вы очень смущены прямо сейчас. Простыми словами Spring MVC работает как-

1.you ударил URL, если URL соответствует RequestMapping присутствующую в контроллере, выполнение передается этому методу контроллера.

2. Этот контроллер вызывает службу, в которой присутствует логический код, и использует слой DAO. Уровень сервиса может возвращать некоторые данные.

3. Данные, которые сохраняются, являются атрибутами и передаются на просмотр (ваш файл jsp).

Что вы делаете, это вызов контроллера, который вызывает услугу, которая, в свою очередь, DAO и DAO расширяет HttpServlet (совершенно неправильно).

Либо вы используете контроллер для вызова Dao, либо вызов класса, который расширяет HttpServlet (опять же это не происходит весной), вы не можете использовать оба.

+0

нормально, так что ваше высказывание переводит логику DAO в сервис в моем случае? – smoggers

+0

Да, поскольку вы не используете какую-либо базу данных, весь код должен быть только в контроллере и службе. из контроллера верните имя файла jsp, который вы хотите вызвать, и строка, которую вы хотите использовать в jsp, должна быть установлена ​​в атрибуте модели для доступа к файлу jsp –

+0

, также избавиться от метода doGet. это не делает ничего в вашем случае. –

0

Добавьте эту строку на страницу JSP, это позволит EL и отображать объекты:

<%@ page isELIgnored="false" %> 
Смежные вопросы