题
我认为我缺少一些关于表达语言的基本知识。
练习.jsp (下)输出 14
, ,正如预期的那样。
<jsp:scriptlet>
request.setAttribute("a", 5);
request.setAttribute("b", 9);
</jsp:scriptlet>
${a+b}
练习2.jsp (下)输出 0
.
<jsp:scriptlet>
Integer a = 5;
Integer b = 9;
</jsp:scriptlet>
${a+b}
Practice2.jsp 中发生了什么?为什么 EL 似乎无法评估这些变量?这是范围问题,还是我错过了更大的问题?
解决方案
表达语言构造
${a + b}
寻找带有键的属性 a
和 b
在页面、请求、会话和 servlet 上下文中,返回它找到的第一个。如果不使用您想要访问它们的键将它们显式添加到任何上下文中,它就无法读取 scriptlet 中声明的变量。
我建议您立即放弃 scriptlet,原因如下 本文 和别的。
其他提示
这 JSP 2.2 规范 描述变量如何解析:
${product}
该表达式将查找名为的属性 产品, ,搜索 页面、请求、会话和应用程序 示波器,并将返回其价值。如果未找到该属性,则返回 null。
这些范围被记录为:
小脚本 (<% %>
)是一种古老的机制,允许您将 Java 代码直接注入到根据 JSP 语法生成的 servlet 中。也就是说,它们允许您将业务逻辑注入到您的视图中。
由于您的代码未将值设置为上述任何范围,因此它们对表达式语言不可见 变量解析器.
scriplet 中变量的范围仅限于 scriplet,
尝试这个:
<jsp:scriptlet>
Integer a = 5;
Integer b = 9;
pageContext.setAttribute("a", a);
pageContext.setAttribute("b", b);
</jsp:scriptlet>
不隶属于 StackOverflow