2012-02-12 57 views
-1

用戶名正在打印NULL,這裏servlet和jsp頁面實際上有什麼問題。請注意我也在這裏使用javabean。我使用bean db的兩次相同的會話屬性。USERNAME PRINTING NULL; javabeans,jsp會話

SERVLET ONE

if(userPassword!=null && userPassword.equals(password)) { 

    HttpSession session = request.getSession(); 
    BookingBean db = (BookingBean)session.getAttribute("formData"); //use existing session 
    if(db == null) { 
    db = new BookingBean(); } 

    db.setUsername(username); 
    session.setAttribute("formData", db); 
    getServletContext().getRequestDispatcher("/BookingForm.jsp").forward(request, response); 
    } else ...... 

SERVLET二

 HttpSession session = request.getSession(); 
    if(!session.isNew()){ 

     db = new BookingBean(); 
     db.setRandom(); 
     db.setAdult(adults); 
     db.setChildren(children); 
     db.setOap(oap); 
     db.setEmail(email); 
     db.setDate(date); 
     db.setLocation(loc); 
     db.setPromo(promo); 
     db.setTime(time); 
     db.setfirstName(firstName); 
     db.setsurName(surname); 
     db.setTotal(); 
     session.setAttribute("formData", db); 


    } 



JSP PAGE 


    <jsp:useBean id="formData" class="bean.BookingBean" scope ="session"> 

    </jsp:useBean> 

    <%BookingBean username = (BookingBean)session.getAttribute("formData"); 
     if(username==null) { 
         // if session is expired, forward it to login page 

    %> 
    <jsp:forward page="Login.jsp" /> 
    <%}%> 

    <p>Confirmation of Booking for the following user: <%=formData.getUsername()%><p><br><br> 
+0

你能提供你的JSP代碼? – 2012-02-12 15:14:30

回答

0

看起來像調用時既小服務程序創建一個新的BookingBean:

db = new BookingBean(); 

所以,當你將它存儲到會話在密鑰"formData"下,由另一個servlet存儲的BookingBean被覆蓋。相反,您需要首先檢查會話是否已經包含該bean,並且只有在會話中沒有存儲該bean的情況下才創建新的會話。

這裏有一個簡單的方法來檢查,如果會議已經有這個對象:

BookingBean db = (BookingBean)session.getAttribute("formData"); 

//HttpSession will return null, if there is no object with the given key 
if(db == null) 
{ 
    db = new BookingBean(); 
} 

//Continue as before... 
+0

究竟發生了什麼,你能告訴我如何在if語句中做到這一點? – user1106130 2012-02-12 15:23:35

+0

@ user1106130:看到我編輯的答案 – esaj 2012-02-12 15:28:15

+0

看到我編輯的代碼,仍然沒有輸出用戶名,如在jsp中。 – user1106130 2012-02-12 15:42:04

0

看起來你正在使用您的數據的兩個不同的對象。確保你只使用一個對象。每個servlet都應該檢查,如果該屬性已經用一個BookingBean實例設置並使用這個實例。

確認,正在同步會話對象:

synchronized (request.getSession().getId().intern()) { 
//dosomething 
} 
+0

感謝您的幫助,但我不允許在此階段使用getId,實習生等,但問題的確在於創建相同的對象兩次。 – user1106130 2012-02-12 15:24:59

+0

沒有這一點,你可能會遇到一些競速條件檢查對象的存在和設置它。 – Alex 2012-02-12 17:18:04