Note that there are some explanatory texts on larger screens.

plurals
  1. POPassing list from servlet to jsp null
    text
    copied!<p>I am trying to retrieve values from a database based on a selection of dates the user makes in a JSP page. The user will select two dates and the database will be queried. </p> <p>In my Servlet i am doing this. The for statement tells me that the list has got values in which are correct.</p> <pre><code>VehiclesList list = dataManager.getVehiclesWhere(dateFrom, dateTo); request.setAttribute("vehiclesList", list); VehiclesList vList = (VehiclesList) request.getAttribute("vehiclesList"); for (int pos = 0; pos &lt; vList.size(); pos++) { Vehicles vehicles = vList.getVehicleAt(pos); System.out.println(vehicles.getC02Emissions()); System.out.println(vehicles.getManufacture()); System.out.println(vehicles.getRegNumber()); System.out.println(vehicles.getHireRate()); } RequestDispatcher dispatcher = request.getRequestDispatcher("/vehicles.jsp"); dispatcher.forward(request, response); </code></pre> <p>This is the code in my JSP page. I am doing the same process above, ie requesting the attribute, creating a new list and displaying the data, but the new list i am creating is coming out null and i am receiving a null pointer exception.</p> <pre><code>VehiclesList vList = new VehiclesList(); vList = (VehiclesList) request.getAttribute("vehiclesList"); for (int pos = 0; pos &lt; vList.size(); pos++) { Vehicles vehicle = vList.getVehicleAt(pos); System.out.println(vehicle.getC02Emissions()); } </code></pre> <p>Why is the list on the JSP side null, when on the servlet side it holds the correct values?</p> <p>EDIT-----</p> <p>This is my stacktrace.</p> <pre><code> WARNING: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at org.apache.jsp.vehicles_jsp._jspService(vehicles_jsp.java from :257) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111) at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377) at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:680) </code></pre> <p>EDIT 2------------</p> <p>Servlet code</p> <pre><code>package Oracle; import RentalRecords.Vehicles; import RentalRecords.VehiclesList; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class VehiclesServlet extends HttpServlet { private boolean dbOK = false;//boolean to check if data input is not null private Vehicles vehicle;//used to get user data from bean private DatabaseConnector dataManager;//used to interact with the database /** * * Initialises the servlet by creating a new DatabaseConnector object which * will be used to interface with the database */ public void init() { dataManager = new DatabaseConnector(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String dateFrom = request.getParameter("from");//get email submitted from form String dateTo = request.getParameter("to");//get password submitted from form System.out.println(dateFrom + dateTo); if (dateFrom != null || dateTo != null) { dbOK = true; } else { dbOK = false; }//end if HttpSession session = request.getSession(true);//set the session if (dbOK) { try { System.out.println(dbOK); VehiclesList list = dataManager.getVehiclesWhere(dateFrom, dateTo); request.getSession().setAttribute("vehiclesList", list); VehiclesList vList = (VehiclesList) request.getAttribute("vehiclesList"); for (int pos = 0; pos &lt; vList.size(); pos++) { Vehicles vehicles = vList.getVehicleAt(pos); System.out.println(vehicles.getC02Emissions()); System.out.println(vehicles.getManufacture()); System.out.println(vehicles.getRegNumber()); System.out.println(vehicles.getHireRate()); } RequestDispatcher dispatcher = request.getRequestDispatcher("/vehicles.jsp"); dispatcher.include(request, response); //request.getRequestDispatcher("vehicles.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); }//end try } else { //User is not valid, redirect back to index.jsp and inform user session.setAttribute("signupError", "Signup Not Successful"); session.setAttribute("signupSuccess", null);//set this null if it is a resubmit System.out.println(session.getAttribute("signupError")); RequestDispatcher dispatcher = request.getRequestDispatcher("/vehicles.jsp"); dispatcher.forward(request, response); } } } </code></pre> <p>JSP Code</p> <pre><code>&lt;%@page import="RentalRecords.Vehicles"%&gt; &lt;%@page import="RentalRecords.VehiclesList"%&gt; &lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt; &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt; &lt;title&gt;JSP Page&lt;/title&gt; &lt;script&gt; $(document).ready(function() { var from = $( "#from" ).datepicker({ defaultDate: "+1w", changeMonth: true, numberOfMonths: 1, minDate: 0, dateFormat: 'd-M-y', onClose: function( selectedDate ) { $( "#to" ).datepicker( "option", "minDate", selectedDate ); } }); var to = $( "#to" ).datepicker({ defaultDate: "+1w", changeMonth: true, numberOfMonths: 1, minDate: 0, dateFormat: 'd-M-y', onClose: function( selectedDate ) { $( "#from" ).datepicker( "option", "maxDate", selectedDate ); } }); }); &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;form id="getdates" method="get" action="getdates"&gt; &lt;label for="from"&gt;From&lt;/label&gt; &lt;input type="text" id="from" name="from" /&gt; &lt;label for="to"&gt;to&lt;/label&gt; &lt;input type="text" id="to" name="to" /&gt; &lt;input id="submitdates" name="submitdates" type="submit" value="Search" /&gt; &lt;/form&gt; &lt;div class="header_01"&gt;Vehicles&lt;/div&gt; &lt;% VehiclesList vList = new VehiclesList(); vList = (VehiclesList) request.getSession().getAttribute("vehiclesList"); for (int pos = 0; pos &lt; vList.size(); pos++) { Vehicles vehicle = vList.getVehicleAt(pos); System.out.println(vehicle.getC02Emissions()); %&gt; &lt;table&gt; &lt;tr&gt; &lt;td class="label"&gt;&lt;label id="ltable" for="table"&gt;&lt;/label&gt; &lt;table&gt; &lt;tr&gt; &lt;td class="label"&gt;&lt;label id="lbodytype" for="transmission"&gt;Body Type&lt;/label&gt;&lt;/td&gt; &lt;td class="field"&gt;&lt;input id="bodytype" name="transmission" type="text" value="&lt;%= vehicle.getBodyType()%&gt;" maxlength="50" readonly/&gt;&lt;/td&gt; &lt;td class="status"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="label"&gt;&lt;label id="ltransmission" for="transmission"&gt;Transmission&lt;/label&gt;&lt;/td&gt; &lt;td class="field"&gt;&lt;input id="transmission" name="transmission" type="text" value="&lt;%= vehicle.getTransmission()%&gt;" maxlength="50" readonly/&gt;&lt;/td&gt; &lt;td class="status"&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;% }%&gt; &lt;/body&gt; &lt;/html&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload