jsp中变量的范围

jiangtianyin 2010-04-14 11:37:54
这几天刚学jsp,做了一个小页面,就是一个简单的计算器,在<% %>里面申明变量并赋值后,在另一个<% %>中却不能访问,这是为什么呢?
源代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<title>My JSP 'MyJsp.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<head>
<script language="javascript">
<!--
function checkNum()
{
var num1=cal.num1.value;
var num2=cal.num2.value;
if(num1==""||num2=="")
{
window.alert("运算数不能为空!");
return false;
}
else
{
var msg="";
if(Math.round(num1)!=num1)
msg+="第一个数类型错误!";
if(Math.round(num2)!=num2)
msg+="第二个数类型错误!";
if(msg!="")
{
window.alert(msg);
return false;
}
}

}
-->
</script>
</head>

<body>
<%
String n1=request.getParameter("num1");
String n2=request.getParameter("num2");
String op=request.getParameter("opera");
int num1;
int num2;
char opera;
int result;
//变量在这里申明
if(n1!=null&&n2!=null&&op!=null){
result=0;
num1=Integer.parseInt(n1);
num2=Integer.parseInt(n2);
opera=op.charAt(0);
switch(opera){
case '+':result=num1+num2;
break;
case '-':result=num1-num2;
break;
case '*':result=num1*num2;
break;
case '/':result=num1/num2;
break;
default:
break;
}

}
%>
<form name="cal" action="Calculator.jsp" method="post">
<h1>我的计算器</h1><br>
<hr/>
第一个数:<input type="text" name="num1"/><br/>
选择运算符:
<select name="opera">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select><br/>
第二个数:<input type="text" name="num2"/><br/>
<input type="submit" value="确定" onclick="return checkNum()"/>
</form>
<hr/>
<%
out.println(num1+" "+opera+" "+num2+" = "+result);//为什么在这里不能访问呢???????提示:The local variable opera may not have been
initialized
%>

</body>
</html>

...全文
142 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZangXT 2010-04-15
  • 打赏
  • 举报
回复
没注意
没有初始化
int num1 = 0;
int num2 =0;
char opera = 0;
int result=0;
如果在if条件中初始化,另外的分支还是未初始化的。
看报错
quxiuer 2010-04-15
  • 打赏
  • 举报
回复
jsp中声明变量 得用<%! %>
anyz001 2010-04-15
  • 打赏
  • 举报
回复
你可以这样写:
<jsp:userBean id="ObjectName" type="packageName.class " scope="request" />
就可以了,其中id和type要匹配
tanxd39 2010-04-15
  • 打赏
  • 举报
回复
没有初始化
zhufenghappy 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zangxt 的回复:]
没注意
没有初始化
int num1 = 0;
int num2 =0;
char opera = 0;
int result=0;
如果在if条件中初始化,另外的分支还是未初始化的。
看报错
[/Quote]
3楼正解,主要是没初始化,如果你的if分支不成立,再使用就出问题了。
zm_hs 2010-04-15
  • 打赏
  • 举报
回复
可以用的
jiangtianyin 2010-04-14
  • 打赏
  • 举报
回复
难道<% %>中定义的不能相互访问吗?
ZangXT 2010-04-14
  • 打赏
  • 举报
回复
<%! int num2;%>
定义成员变量就可以访问了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧