我是jsp的新手。我在jsp页面中写了一个“声明”和一个“scriptlet”。
但我在声明和“scriptlet”中创建的变量不会存储在任何一个
中范围。即页面范围,请求范围,应用范围。为什么。
以下是我的以下jsp文件,名为“success.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”变量中的值。
答案 0 :(得分:0)
我认为开始理解jsps的最好方法是将它们秘密地解释为java类。但更具体地说:在评估每一行之后,它们被放入一个逐行写出html的函数中。因此,为什么你可以拥有&lt; %%&gt;标签。现在,正因为如此,&lt; %%&gt;标签实际上是已评估但未写入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
祝你好运,编码愉快。 :)
答案 1 :(得分:0)
像这样更改您的代码
var p = <%=x%>;
var q = <%=y%>;
答案 2 :(得分:0)
正如您所指出的,jsp-scriplet代码 <%! int x=20; %>
创建的变量在任何范围内都不可用,因为它们直接在编译的jps页面内部声明(任何内部编译为servlet类的jsp页面)。
要在jsp页面的其余部分中使用变量 x ,您有两个不同的选项:
使用jsp-scriplet表达式<%= x %>
,在这种情况下,javascipt片段中的代码将是:
var p =“&lt;%= x%&gt;”;
var q =“&lt;%= y%&gt;”;
在 pageContext 范围内手动保存变量 x,y ,这样它们就可以从EL中获取:
&LT;%
int x = 20;
int y = 30;
pageContext.setAttribute(“x”,x);
pageContext.setAttribute(“y”,y);
%GT;
请注意,<%! int x = 20; %>
与<% int x=20; %>
不同。