2012-02-12 50 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