Java 表达式语言:变量与属性

Java 表达式语言:变量与属性,java,jsp,el,scriptlet,Java,Jsp,El,Scriptlet,我想我缺少了一些基本的表达语言 practice.jsp(如下)按预期输出14 <jsp:scriptlet> request.setAttribute("a", 5); request.setAttribute("b", 9); </jsp:scriptlet> ${a+b} practice2.jsp中发生了什么? 为什么EL似乎不能评估这些变量? 这是一个范围问题,还是我遗漏了更大的内容?表达式语言构造 ${a + b} 在页面、请求、会话和s

我想我缺少了一些基本的表达语言

practice.jsp(如下)按预期输出
14

<jsp:scriptlet>
    request.setAttribute("a", 5);
    request.setAttribute("b", 9);
</jsp:scriptlet>

${a+b}
practice2.jsp中发生了什么? 为什么EL似乎不能评估这些变量?
这是一个范围问题,还是我遗漏了更大的内容?

表达式语言构造

${a + b}
在页面、请求、会话和servlet上下文中查找键为
a
b
的属性,返回找到的第一个属性。它无法读取scriptlet中声明的变量,而不使用您希望访问它们的键显式地将它们添加到这些上下文中


出于和其他原因,我建议您立即放弃Scriptlet。

scirplet中的变量范围仅限于scriplet,
试试这个:

<jsp:scriptlet>
    Integer a = 5;
    Integer b = 9;
    pageContext.setAttribute("a", a);
    pageContext.setAttribute("b", b);
</jsp:scriptlet>

整数a=5;
整数b=9;
setAttribute(“a”,a);
setAttribute(“b”,b);
描述了如何解析变量:

此表达式将查找名为product的属性,并进行搜索 页面、请求、会话和应用程序的作用域为,并将返回 它的价值。如果未找到该属性,则返回null

这些范围记录为:

  • pageScope-将属性名称映射到其值的
    映射
  • requestScope-将属性名称映射到其值的
    映射
  • 会话范围-将属性名称映射到其值的
    映射
  • 应用程序范围-将属性名称映射到其值的
    映射
)是一种古老的机制,允许您将Java代码直接注入由JSP语法生成的servlet中。也就是说,它们允许您将业务逻辑注入到视图中


由于您的代码没有将值设置为上述任何范围,因此表达式语言无法看到这些值。

这并没有真正回答问题,只是将示例1应用于示例2。如果您将添加
a
b
的结果设置为属性,然后通过
${valueName}
访问它,我认为您的示例会更清晰。
<jsp:scriptlet>
    Integer a = 5;
    Integer b = 9;
    pageContext.setAttribute("a", a);
    pageContext.setAttribute("b", b);
</jsp:scriptlet>
${product}