繁体   English   中英

表达语言:变量与属性

[英]Expression Language: variables vs. attributes

我想我错过了一些关于表达语言的基本知识。

practice.jsp (下面)输出14 ,如预期的那样。

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

${a+b}

practice2.jsp (下面)输出0

<jsp:scriptlet>
    Integer a = 5;
    Integer b = 9;
</jsp:scriptlet>

${a+b}

在practice2.jsp中发生了什么? 为什么EL似乎无法评估这些变量? 这是一个范围问题,还是我错过了更大的东西?

表达式语言构造

${a + b}

在页面,请求,会话和servlet上下文中查找具有键ab属性,返回它找到的第一个。 它没有办法读取在scriptlet中声明的变量,而没有使用您想要访问它们的键将它们显式添加到任何上下文中。

我建议您立即放弃scriptlet,原因在于本文和其他文章中表达的原因。

JSP 2.2规范描述了如何解析变量:

 ${product} 

此表达式将查找名为product的属性,搜索页面,请求,会话和应用程序范围,并将返回其值。 如果未找到该属性,则返回null。

这些范围记录为:

Scriptlets<% %> )是一种古老的机制,允许您将Java代码直接注入到JSP语法生成的servlet中。 也就是说,它们允许您将业务逻辑注入到视图中。

由于您的代码未将值设置为上述任何范围,因此表达式语言变量解析器无法看到它们。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM