网页项目中,在session里设置了一个属性用于记录用户的登录状态,当未登录时为空,登录后为设置好的字符串,然后通过给按钮设置js,点击按钮时,若未登录,弹出提示框,若已登录则跳转相应界面。该按钮和js代码如下:
<a οnclick="checkLoginFromStartButton('<%=logined%>')" id="download-button" class="btn-large waves-effect waves-light teal lighten-1">Get Started</a>
function checkLoginFromStartButton(logined) {
if (logined == null || logined == undefined || logined == '') {
Materialize.toast("Please login first !", 2000);
} else {
window.location.href="/MyProject/pages/Manage.jsp";
}
}
但是在测试过程中发现,无论是已登录还是未登录状态,都会执行else代码块。通过打断点检查,发现在登录时,session中存储的值为指定的字符串,进入了else代码块;但是在未登录时,session中的参数值为null,却同样进入了else代码块。最终发现,通过session.getAttribute(“...”)获取的参数值并强转为String后,原本不存在的属性(null)变为了'null'字符串,也就是说logined值为‘null’,有可能是两种原因,一可能是session.getAttribute(“...”)获取的Object在jsp中被强转为了String之后变为‘null’字符串,二可能是因为在向js中传递时null被转化为了字符串,需要进一步的验证。