smoggers smoggers - 2 months ago 3x
Java Question

Why does my jsp not display output?

No errors at runtime and testing output to the console returns correct data but when I try to display same data in jsp nothing is displayed? Probably something really simple, I'm new to Spring and jsp.

Below are my jsp and DAO files:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
<%@ taglib prefix="c" uri=""%>
<%@ taglib prefix="sql" uri=""%>
<%@ taglib prefix="sf" uri=""%>
<%@ taglib prefix="fn" uri=""%>
<%@page import="" %>
<%@page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<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>
<h2 class="displayStatsLeaderboardHeader">Your stats</h2>
<table class="displayStatsTable" border="1">
<td class="displayStatsTableData">${stats.returnForename()}</td>


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.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;


public class DisplayStatsDAO extends HttpServlet implements Serializable {

private static final long serialVersionUID = 1L;

private LocalSessionFactoryBean sessionFactory;

public void setLocalSessionFactoryBean(LocalSessionFactoryBean sessionFactory) {
this.sessionFactory = sessionFactory;

public DisplayStatsDAO displayStatsDAO() {
return new DisplayStatsDAO();

public DisplayStatsDAO() {


public String returnForename() {
String returnValue = "";
try {
Session session = sessionFactory.getConfiguration().buildSessionFactory().getCurrentSession();
Authentication authentication = SecurityContextHolder.getContext()
String userLoggedIn = authentication.getName();
Criteria criteria = session.createCriteria(UserBean.class);
criteria.add("username", userLoggedIn));
List<UserBean> user = (List<UserBean>) criteria.list();
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();
return returnValue;
} catch (HibernateException e) {
return returnValue;

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: here are my controller/service classes

public class DisplayStatsController {

DisplayStatsService statsService;

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 {
catch (Exception e) {
return "error";
return "userstats";

And my service class:

public class DisplayStatsService {

private DisplayStatsDAO displayStatsDAO;

setDisplayStatsDAO(DisplayStatsDAO displayStatsDAO) {

this.displayStatsDAO = displayStatsDAO;

public void showUserStats() {

log output:

DEBUG - Listing entities:
DEBUG -{surname=Bates,forename=John,gir=64, homeclub=Bearsden GC,, submitCount=18, }
DEBUG - committed JDBC Connection
DEBUG - re-enabling autocommit
Username: John12345
Name: JohnBates
Homeclub: Bearsden GC
Bearsden GC
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 -{surname=Bates, username=John12345, forename=John,homeclub=Bearsden GC,}
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 [] 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


This is how I got my jsp to output the data. I have a method in my Java class that retrieves the data I want and stores it within an Array then I set the HttpServletRequest attribute to this Array. In my jsp I refer to this Array and then output each element of the Array to table columns via a for loop.

<!-- 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>
        <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>