0

Having an issue retrieving items from database, following is my code:

UserDAO.java

public class UserDAO {

    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName("org.hsqldb.jdbcDriver");
            con = DriverManager.getConnection(
                "jdbc:hsqldb:hsql://localhost/oneDB", "sa", "");
        } catch(Exception e) {
            e.printStackTrace();
        }
        return con;
    }

    public static List<User> list() {
        try{
            Connection connection = getConnection();

            List<User> users = new ArrayList<User>();

            try {
                PreparedStatement statement = connection.prepareStatement("SELECT * FROM user");
                ResultSet rs = statement.executeQuery();

                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String address = rs.getString("address");
                    User user = new User(id, name, address);
                    System.out.println("user:" + user.getTheName());
                    users.add(user);
                }
                statement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            return users;
        } catch (Exception e) {
            e.printStackTrace();
           return null;
       }
    }
}

doGet in my servlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<User> users = UserDAO.list();
        request.setAttribute("users", users);
        request.getRequestDispatcher("showUser.jsp").forward(request, response);
}

showUser.jsp

<c:forEach items="${users}" var="user">
        Name: <c:out value="${users.theName}" /> <br>
        Address: <c:out value="${users.theAddress}" /><br>
</c:forEach>

Stack trace :

root cause
java.lang.NumberFormatException: For input string: "name"
    java.lang.NumberFormatException.forInputString(Unknown Source)
    java.lang.Integer.parseInt(Unknown Source)
    java.lang.Integer.parseInt(Unknown Source)
    javax.el.ListELResolver.coerce(ListELResolver.java:157)
    javax.el.ListELResolver.getValue(ListELResolver.java:70)
    org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
    org.apache.el.parser.AstValue.getValue(AstValue.java:169)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:943)
    org.apache.jsp.showUser_jsp._jspx_meth_c_005fout_005f0(showUser_jsp.java:217)
    org.apache.jsp.showUser_jsp._jspx_meth_c_005fforEach_005f0(showUser_jsp.java:178)
    org.apache.jsp.showUser_jsp._jspService(showUser_jsp.java:134)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    controllers.GetUserServlet.doGet(GetUserServlet.java:37)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

I'm new to jsp and servlets so I'm not sure where I've gone wrong. Any help would be appreciated.

tereško
  • 58,060
  • 25
  • 98
  • 150
Paul
  • 5
  • 2

1 Answers1

0

Inside the foreach fragment you should refer to the element as user which is the name provided in the var attribute. Also most likely the fields of the User class are name and address instead or theName and theAddress.

<c:forEach items="${users}" var="user">
        Name: <c:out value="${user.name}" /> <br>
        Address: <c:out value="${user.address}" /><br>
</c:forEach>
cjungel
  • 3,701
  • 1
  • 25
  • 19
  • Changed users to user and it worked. I don't know how I missed that. Thank you!! – Paul Nov 21 '16 at 20:14
  • Great. You may also want to check the way you are handling the closing of the connection and statement in the event of exceptions as you may be leaking resources. Take a look at http://stackoverflow.com/questions/11160557/java-jdbc-best-design-pattern-to-close-database-connection-when-exception-occ. – cjungel Nov 21 '16 at 20:18