Java 表达式语言:变量与属性
我想我缺少了一些基本的表达语言 practice.jsp(如下)按预期输出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
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}