在JavaScript脚本中声明全局变量

3

我有一个像这样的html文件:

<html>
<body>
<% int i=1; %>
<span name="page2"></span>
</body>
</html>

在上述文件的span page2中,我插入了一个新页面,如下所示:

<html>
<body>
<% if(i=1) { %>
<p>1</p>
<% }
else { %>
<p>2</p>
<% } %>
</body>
</html>

我在使用Websphere Portlet Factory将第二个页面插入到第一个页面中。

问题是第二个文件中的变量'i'无法解析。

2个回答

3

任何你在脚本中编写的内容都将成为Servlet服务方法的内容。

因此,

<% int i=1; %>

将会

public void service(request,response){
   int i=0

}

您可以使用JSTL标签,因为避免使用脚本片段是最佳实践。

<c:set var="i" value="1" scope="request/session/application"/>

如果不使用脚本,您的整个示例将变成如下形式

<!--You have to import JSTL libraries-->
html>
<body>
<c:set var="i" value="1" scope="application"/>
<span name="page2"></span>
</body>
</html>

在另一个JSP中访问它。

<html>
<body>
<!-- Expression language-->
<p> ${applicationScope.i eq 1?1:2} </p>
</body>
</html>

1
访问时,您只需要使用您正在使用的范围。例如 ${requestScope.i} 或 ${sessionScope.i},并且应避免使用脚本片段。永远不要在JSP中编写任何Java代码。 - Shoaib Chikate

2

每个jsp文件都在服务器中单独编译。当第二个文件被编译时,它不知道int i的声明。

默认情况下,它存储在页面范围内,

页面范围意味着JSP对象只能从创建它的同一页面中访问

您可以更改设置,

application.setAttribute( "globalVar", i);

在应用程序范围内,可以在整个应用程序中访问它。

当我这样做时,变量i会变成全局的吗? - Rey Rajesh
2
你应该像这样再次获取值,int i= (Integer) application.getAttribute("globalVar"); - Santhosh
欢迎 :) 很高兴能帮到您。 - Santhosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接