JSP中基于Http Session的username属性控制按钮显示问题求助
问题分析与解决方案
你的核心问题是脚本定义的局部变量无法被EL表达式直接访问,导致两个判断逻辑全部失效:
错误原因
- 通过
<% String username1 = ... %>定义的是JSP脚本局部变量,这类变量不属于EL默认查找的四大域(page/request/session/application),所以EL里的${username1}始终为null。 - 方法一中,
${username1.length()!=0}会因username1为null触发方法调用错误,部分容器会将这种错误处理为true,导致按钮始终显示; - 方法二中,
${username1.isEmpty()==true}同样因username1为null无法调用方法,EL求值结果为false,所以按钮始终不显示。
正确写法
方案一:直接用EL访问Session属性(推荐)
无需脚本,直接通过EL的sessionScope对象或默认域查找,结合not empty判断属性是否存在且非空:
<c:if test="${not empty sessionScope.username}"> <button class="btn btn-primary" style="background-color: #887775; border: none;" id="myBtn">Write a review</button> </c:if>
not empty会同时完成两项检查:
- 属性是否存在(非
null) - 属性值是否不是空字符串(
"")
方案二:若需保留脚本逻辑
要把脚本变量存入域对象,让EL能访问到:
<% String username1 = (String) session.getAttribute("username"); pageContext.setAttribute("username1", username1); // 将变量存入page域 %> <c:if test="${not empty username1}"> <button class="btn btn-primary" style="background-color: #887775; border: none;" id="myBtn">Write a review</button> </c:if>
内容的提问来源于stack exchange,提问作者user19571598
相关产品推荐
相关产品推荐

