我认为我缺少一些关于表达语言的基本知识。

练习.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}

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

我建议您立即放弃 scriptlet,原因如下 本文 和别的。

其他提示

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

${product}

该表达式将查找名为的属性 产品, ,搜索 页面、请求、会话和应用程序 示波器,并将返回其价值。如果未找到该属性,则返回 null。

这些范围被记录为:

  • 页面范围 - A Map 那个地图 页面范围 属性名称及其值
  • 请求范围 - A Map 那个地图 请求范围 属性名称及其值
  • 会话范围 - A Map 那个地图 会话范围的 属性名称及其值
  • 适用范围 - A Map 那个地图 应用范围 属性名称及其值

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

由于您的代码未将值设置为上述任何范围,因此它们对表达式语言不可见 变量解析器.

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

<jsp:scriptlet>
    Integer a = 5;
    Integer b = 9;
    pageContext.setAttribute("a", a);
    pageContext.setAttribute("b", b);
</jsp:scriptlet>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top