2014-03-05 121 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' = \ –