2016-03-14 2 views
-1

Я создаю проект с JSP & Сервлет (и сущности), и я пытаюсь создать форму, в которой пользователь регистрируется как клиент и затем перенаправляется на резервацию стр.JSP и Servlet NullPointer - атрибут класса отображения в текстовом поле

Я хочу сохранить идентификатор для Клиента, который только что зарегистрирован, и заполнить его в отключенном текстовом поле, а затем создать резервную копию на следующей странице. Но всякий раз, когда я пытаюсь загрузить класс клиента через jsp, все приложение выходит из строя с помощью NullPointerException.

Похоже, что программа выходит из строя, когда она достигает jsp-тегов для извлечения моего клиента, поскольку она распечатывает c.cPnr на консоли, а также тест в JSP-файле.

<%@ page import = "g24.isp.ejb.Customer" %> 
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Welcome to Ski Village!</title> 
    <link rel="stylesheet" href="new/css/normalize.css"> 
    <link rel="stylesheet" href="new/css/stylesheet.css"> 
    <link href='https://fonts.googleapis.com/css?family=Fjalla+One|Poppins:400,500,600' rel='stylesheet' type='text/css'> 
    <script src="javascript/script.js" type="text/javascript"></script> 
</head> 
<body> 
<% System.out.println("test"); %> 
<% Customer c = (Customer) session.getAttribute("customer"); %> 
    <div id="container"> 
     <!-- HEADER + MENU --> 
     <header> 
      <div class="logo"><!-- Ski Village Logo --></div> 
      <div class="menu"> 
      <ul> 
       <li> <a href="index.html"> Home </a></li> 
       <li class="left-menu"> <a href="about.html"> About </a></li> 
       <li class="right-menu"> <a href="booking.html" id="selected"> Book </a></li> 
       <li> <a href="index.html" > Test</a></li> 
      </ul> 
      </div> 
     </header> 

     <!-- PAGE CONTENT --> 
     <div id="wrapper"> 

      <div class="center-form"> 
       <form action="/HotelClient/HotelServlet" name="resForm" method="post"> 
        <input type="text" name="cPnr" value="<%= c.getcPnr() %>" > 
        <input type="number" name="week" min="1" max="52" placeholder="Select week" > 
        <select name="cno"> 
         <option value="1">Adventure Cabin 
         </option> 
         <option value="2">Cozy Cabin 
         </option> 
         <option value="3">Snowy Cabin 
         </option> 
         <option value="4">Hacker Cabin 
         </option> 
        </select> 
         <input type="submit" name="checkres" value="Check availability"> 
         <input type="submit" name="submitresform" value="Create reservation" type="hidden"> 
         <input name="operation" value="bajskorv" type="hidden"> 
       </form> 
      </div> 



     <!-- FOOTER + SOCIAL ICONS --> 
      <footer> 
       <a href="http://facebook.com/"><img src="img/facebook-logo.png" class="social-icon" alt="facebook logo"></a> 
       <a href="http://instagram.com/"><img src="img/instagram-logo.png" class="social-icon" alt="instagram logo"></a> 
       <a href="http://twitter.com/"><img src="img/twitter-logo.png" class="social-icon" alt="twitter logo"></a> 
       <p>&copy; 2016 | Ski Village</p> 
      </footer> 

     </div> 
    </div> 
</body> 
</html> 

код сервлета:

package g24.isp.servlets; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.List; 

import javax.ejb.EJB; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import g24.isp.ejb.Cabin; 
import g24.isp.ejb.Customer; 
import g24.isp.ejb.Hotel; 
import g24.isp.ejb.Reservation; 
import g24.isp.facade.Facade; 
import g24.isp.facade.FacadeLocal; 
import g24.isp.ejb.MethodClass; 

/** 
* Servlet implementation class HotelServlet 
*/ 
@WebServlet("/HotelServlet") 
public class HotelServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    @EJB 
    private FacadeLocal facade; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public HotelServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     PrintWriter out = response.getWriter(); 
     out.println("MainServlet-doGet"); 

     out.close(); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
    *  response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     // TODO Auto-generated method stub 

     String url = "did not get an url"; 
     // Get hidden field 
     String operation = request.getParameter("operation"); 

     MethodClass mc = new MethodClass(); 


     if (operation.equals("createcustomer")) { 
      String cPnr = request.getParameter("txtcPnr"); 
      String cAddress = request.getParameter("txtcAddress"); 
      String cPhone = request.getParameter("txtcPhone"); 
      String cName = request.getParameter("txtcName"); 

      if (facade.findByCpnr(cPnr) == null) { 
       Customer customer = new Customer(); 
       customer.setcPnr(cPnr); 
       customer.setcAddress(cAddress); 
       customer.setcPhone(cPhone); 
       customer.setcName(cName); 
       facade.createCustomer(customer); 
       url = "/new/reservation.jsp"; 
      } else { 
       url = "new/newcust.jsp"; 
      } 
     } 

     else if (operation.equals("createreservation")) { 
      String cpnr = request.getParameter("txtcPnr"); 
      int week = mc.ParseStringToInt(request.getParameter("week")); 
      int cno = mc.ParseStringToInt(request.getParameter("cno")); 

      Customer cs = facade.findByCpnr(cpnr); 
      Cabin cb = facade.findByCabinNo(cno); 

      if (cb != null && cs != null) { 
       Reservation res = new Reservation(); 
       res.setCabin(cb); 
       res.setCustomer(cs); 
       res.setrDate(week); 

       facade.createReservation(res); 
       url = "/Index.jsp"; 
      } else { 
       System.out.println("Did not enter if statement"); 
       url = "/Index.jsp"; 
      } 

     } 

     else if (operation.equals("newcustomer")) { 
      url = "/new/newcust.jsp"; 
     } 

     else if (operation.equals("setcustomer")) { 
      System.out.println("Servlet - Create reservation"); 

      String cpnr = request.getParameter("txtcPnr"); 
      System.out.println(cpnr); 
      url = "/new/reservation.jsp"; 

      Customer customer = facade.findByCpnr(cpnr); 
      if (customer != null) { 
      System.out.println(customer.getcName()); 
      session.setAttribute("customer", customer); 
      url = "/reservation.jsp"; 
      } 

      else { 
      System.out.println("Customer value is null"); 
      } 
     } 


     System.out.println(url); 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
     dispatcher.forward(request, response); 
    } 
} 

ответ

0

Я решил проблему - я пытался найти клиента, обратившись к методу facade.findBycPnr().

Решение было создано session.setAttribute (клиент, cust) при создании клиента.

0

Может быть, это не установив атрибут сеанса и когда c.getcPnr() запускается на выполнение, он бросает NullPointerException. Вы можете проверить, установлен ли атрибут в session? Вы можете попробовать распечатать 'c' в jsp.

Смежные вопросы