【问题标题】:scripting elements in a jsp pagejsp页面中的脚本元素
【发布时间】:2013-11-15 21:13:37
【问题描述】:

我是 jsp 的新手。我正在jsp页面中写一个“声明”和一个“scriptlet”。

但是我在声明和“scriptlet”中创建的变量不存储在任何一个

范围。即页面范围、请求范围、应用范围。为什么。

这是我名为“success.jsp”的以下jsp文件,

     <%! int x=20; %>//x is not created in any scope.
    <% int y=30; %>// y is not created in any scope.

   <script>

  var p="${x}";//here,variable p does not get any value.
  var q="${y}";//here,variable does not get any value.

  </script>

为什么变量“x”和“y”没有在任何一个范围内创建。以及如何获取存储在“x”和“y”变量中的值。

【问题讨论】:

  • ${x} 用于 EL 而不是 Scriptlet。小脚本使用

标签: jsp el scopes


【解决方案1】:

我认为开始理解 jsps 的最佳方式是它们被秘密地解释为 java 类。但更具体地说:在评估每一行之后,它们被放入一个逐行写出 html 的函数中。因此,为什么您可以拥有 标签。现在,正因为如此, 标记实际上是被评估但未写入 html 的行。评估存储在生成的 java 方法的范围内。所以最终发生的事情看起来像:

public void SendHtmlPage() {
  int x=20; 
  int y=30; 

  Print("<script>");

  Print("var p=\"${x}\"\;"); //This gets evaluated to getSession.getAttribute("x")
                             //Since there is no x in the session, it returns null
  Print("var q=\"${y}\"\;"); //Same here

  Print("</script>);
}

所以。这就是为什么在您的 scriptlet 中不知道 x 和 y 的原因。但是,有一些方法可以将方法范围的变量保存到会话范围。看看这个:I can pass a variable from a JSP scriptlet to JSTL but not from JSTL to a JSP scriptlet without an error

祝你好运,编码愉快。 :)

【讨论】:

    【解决方案2】:

    像这样改变你的代码

    var p = <%=x%>;
    var q = <%=y%>;
    

    【讨论】:

      【解决方案3】:

      如您所述,由 jsp-scriplet 代码 &lt;%! int x=20; %&gt; 创建的变量在任何范围内均不可用,因为它们直接在已编译的 jps 页面(内部编译为 servlet 类的任何 jsp 页面)内声明。
      要在 jsp 页面的其余部分中使用变量 x,您有两个不同的选项:

      1. 使用 jsp-scriplet 表达式 &lt;%= x %&gt;,在这种情况下,您的 javascipt 片段中的代码将是:

        var p = "";
        var q = "";

      2. 手动将变量 x, y 保存在 pageContext 范围内,这样它们就可以从 EL 中获得:

        整数 x=20;
        int y=30;
        pageContext.setAttribute("x", x);
        pageContext.setAttribute("y", y);
        %>

      请注意,&lt;%<strong>!</strong> int x = 20; %&gt;&lt;% int x=20; %&gt; 不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多