2016-09-27 66 views
0

這是我的LoginServlet類的代碼。爲什麼我在jsp中使用if語句時出現此錯誤?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    String userName = request.getParameter("username"); 
    String password = request.getParameter("password"); 

    boolean loginFailed; 

    User user = null; 

    user = loginService.getUser(userName); 

    if(user != null && user.getPassword().equals(password)){ 

     userType = loginService.getUserType(user).getUser_type(); 

     if(userType.equals(USER_TYPE_CUSTOMER)){ 
      HttpSession session = request.getSession(); 
      session.setAttribute("username", user.getUsername()); 
      response.sendRedirect("home_customer.jsp"); 
     }else{ 

     } 
    }else{ 
     loginFailed = true; 

     request.setAttribute("username", userName); 
     request.setAttribute("loginFailed", loginFailed); 
     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/login.jsp"); 
     dispatcher.forward(request, response); 
    } 
} 

我有布爾名爲loginFailed。當用戶沒有帳戶時,它將被賦予真值。我在我的jsp頁面中做了一個代碼來檢查這個變量。這是我的jsp代碼。

<body> 
<div class="container container-table" id="login"> 
    <div class="row vertical-center-row"> 
     <div class="col-md-4 col-md-offset-4"> 
      <div style="background-color: #297f56; padding: 15px; border-radius: 5%;"> 
       <h1 style="text-align: center; color: white;">JJ STORE</h1> 
       <% Boolean loginFailed = (Boolean) request.getAttribute("loginFailed"); 
        if(loginFailed){ 
         out.println("<div class='alert alert-warning'>Warning! Dont submit this.</div>"); 
        }%> 
       <form action="processLogin" method="post"> 
       <div class="form-group" > 
        <label for="email" style="color: white;">Username:</label> 
        <input type="text" class="form-control" name="username" value="${username}"> 
       </div> 
       <div class="form-group"> 
        <label for="pwd" style="color: white;">Password:</label> 
        <input type="password" class="form-control" name="password"> 
       </div> 
       <button type="submit" class="btn btn-default">Submit</button> 
       </form> 
      </div> 
     </div> 
    </div> 
</div> 

我不知道這裏有什麼問題。我試着改變if區塊的條件,放入「true」並且代碼順利。但是,如果我把我從servlet獲得的布爾值,它會給我這個錯誤。

enter image description here

我在做什麼錯?

回答

2

當它失敗時,您只設置loginFailed。成功時,您不設置該屬性,因此您在JSP中獲得空值,因此在撥打if(loginFailed)時導致NullPointerException。要解決這個問題

一種方法是測試Boolean對象不拆箱:

if (Boolean.TRUE.equals(loginFailed)) 

另一種選擇是,以確保設置屬性無論成功或失敗:

if (user != null && user.getPassword().equals(password)) { 
    //... 
    loginFailed = false; 
} else { 
    //... 
    loginFailed = true; 
} 
request.setAttribute("loginFailed", loginFailed); 
+0

你的第一個建議解決了我的問題!這是我第一次遇到這個問題。順便說一下,我是一名實習生jr軟件工程師,其中一個給我的項目是以原始方式創建網站(使用servlet和jsp)。我不明白爲什麼我必須使用布爾代替布爾值(我從另一個答案中得到了這個)。無論如何,感謝哥們! – saluyotamazing

相關問題