2014-03-05 42 views
0

我是一位致力於JSP頁面的Perl開發人員。除了最後一個問題,一切進展順利。當我刷新會話已過期的頁面時,出現以下錯誤。JSP會話變量不可用

org.apache.jasper.JasperException: An exception occurred processing JSP page... at line 10 

在第10行上,代碼拉取了不再存在的會話變量。有沒有辦法編寫代碼,以便在會話變量不存在的情況下存儲一個假值。

boolean b_checkin = ((Boolean)session.getAttribute("session_checkin")); 

感謝您的幫助。

回答

1

嘗試使用Boolean代替。 boolean是原始類型,只能保存truefalse值。另一方面,Booleanboolean基本類型的類封裝,因爲它擁有一個對象,它也接受null值。所以,你可以更新您的代碼:

Boolean b_checkin = (Boolean)session.getAttribute("session_checkin"); 
//if the session expired, then define a default value (probably false) 
//otherwise, use the value obtained from session 
b_checkin = (b_checkin == null) ? false : b_checkin; 

短手的方式來做到這一點:

Boolean b_checkin = Boolean.TRUE.equals(session.getAttribute("session_checkin")); 
+0

這是否行得通?布爾b_checkin =(布爾)session.getAttribute(「session_checkin」)!=布爾。假; –

+0

@ wall-nut IMO如果它是'null'那麼它應該是'false'。如果是這種情況,那麼只需將它與'Boolean.TRUE'進行比較。 –

1

試試這個:

boolean b_checkin = session.getAttribute("session_checkin")!=null; 

如果* session_checkin *屬性爲null,則b_checkin是假的。否則如此。

+0

我補充一點。我將不得不等待會議過期,看看它是否適合我。 –

+0

我認爲你不能對任何數據類型進行布爾轉換,除了布爾值_true_或_false_。嘗試在IDE中進行手動轉換,如下所示:'boolean check =(Boolean)「Test string」;'它不起作用。 –

+0

這種方法的問題是,如果'session.getAttribute(「session_checkin」)'持有'true',因爲與'null'不同,'b_checkin'值將是'false' = \ –