2012-02-12 17 views
-1

ユーザー名はNULLを出力していますが、ここではサーブレットとJSPページの問題が何ですか?私もここでjavabeanを使用していることに注意してください。私はBeanのdbと同じセッション属性を2回使用しています。呼び出されたときに、両方のあなたのサーブレットが新しいBookingBeanを作成するようUSERNAME PRINTING NULL; javabeans、jsp session

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 TWO

 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コードを提供することはできますか? –

答えて

0

はルックス:

db = new BookingBean(); 

だから、あなたがセッションにそれを保存するときキー"formData"の下に、他のサーブレットによって保存された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

+0

@ user1106130:私の編集した回答を参照 – esaj

+0

私の編集したコードを見て、まだjspのようにユーザー名を出力していません。 – user1106130

0

あなたのデータのための2つの異なるオブジェクトを使用しているように見えます:

ここでセッションがすでにこのオブジェクトを持っているかどうかを確認するための簡単な方法です。 1つのオブジェクトだけを使用していることを確認してください。属性がすでにBookingBeanインスタンスで設定されていて、このインスタンスを使用しているかどうかをすべてのサーブレットがチェックする必要があります。

を使用すると、セッションオブジェクトを同期していることを、確認してください:

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

助けてくれてありがとうございます。この段階でgetId、internなどを使用できません。同じオブジェクトを2回。 – user1106130

+0

それがなければ、オブジェクトの存在をチェックして設定するいくつかのレース条件に遭遇する可能性があります。 – Alex