JSP的scriptlet中if条件使用EL表达式编译报错怎么解决?
问题根因
- EL表达式
${message}属于JSP表达式语言语法,仅可在模板文本、JSP标签属性中直接解析,不能嵌套进<% %>包裹的Java脚本段中使用。你当前的写法是把EL放到了Java代码块的if判断条件里,Java编译器无法识别$开头的语法,所以直接抛出编译异常。
修复方案
提供两种可选修复方式:
方案1:沿用脚本段写法,不使用EL
直接在Java脚本段中从request域获取属性做判断,代码如下:
<% // 从request域取出布尔类型的message属性 boolean message = (boolean) request.getAttribute("message"); if (message) { %> <p> Today is weekend</p> <% } else { %> <p> Today is not weekend</p> <% } %>
方案2:使用EL+JSTL标签实现(推荐,符合JSP最佳实践,避免脚本段混用)
首先在JSP页面顶部引入JSTL核心标签库声明:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
替换原有判断代码块为如下内容:
<c:choose> <c:when test="${message}"> <p> Today is weekend</p> </c:when> <c:otherwise> <p> Today is not weekend</p> </c:otherwise> </c:choose>
该方案完全避免了Java脚本段的使用,语法更简洁,也不会出现语法混用的错误。
内容的提问来源于stack exchange,提问作者sureshtechi
相关产品推荐
相关产品推荐

