jsp中select标签传值的奇特问题,虽然我已经解决,但是还是说下和大家探讨

Bing 2009-01-21 03:37:39
<body>
<p>
请选择查询城市
</p>
<form action="tongji2.jsp" method="post">
<select name="city" id="city">
<option selected value="">
请选择
</option>
<%
DataBaseInquire dbInquire = new DataBaseInquire();
for (int i = 0; i < dbInquire.ByCityDictionaryInquire().size(); i++) {
ZjCity zjcity = (ZjCity) dbInquire.ByCityDictionaryInquire()
.get(i);
%>
<option value="<%=zjcity.getValue()%>"><%=zjcity.getValue()%></option>
<%
}
%>
</select>
<input type="submit" value="提交"></input>
<input type="reset" value="重置"></input>
</form>
<table border>
<%
System.out.println("city参数值" + request.getParameter("city"));
if ( request.getParameter("city").equals("")||request.getParameter("city")==null)
{
for (int i = 0; i < dbInquire.ByCityDictionaryInquire().size(); i++) {
ZjCity zcity = (ZjCity) dbInquire.ByCityDictionaryInquire()
.get(i);
%>

<tr>
<td><%=zcity.getValue()%><br>
</td>
<td><%=dbInquire.ByCreatorIsNullInquire(zcity.getCode(),
-1)%><br>
</td>
<td><%=dbInquire.ByCreatorIsNullInquire(zcity.getCode(),
3)%><br>
</td>
<td><%=dbInquire.ByCreatorIsNullInquire(zcity.getCode(),
1)%><br>
</td>
</tr>
<%
}
} else {
for (int i = 0; i < dbInquire.ByCityDictionaryInquire(
request.getParameter("city")).size(); i++) {
ZjCity zcity = (ZjCity) dbInquire.ByCityDictionaryInquire(
request.getParameter("city")).get(i);
%><tr>
<td><%=zcity.getValue()%><br>
</td>
<td><%=dbInquire.ByCreatorIsNullInquire(zcity.getCode(),
-1)%><br>
</td>
<td><%=dbInquire.ByCreatorIsNullInquire(zcity.getCode(),
3)%><br>
</td>
<td><%=dbInquire.ByCreatorIsNullInquire(zcity.getCode(),
1)%><br>
</td>
</tr>
<%
}
}
%>
</table>
</body>


以上是我一个tongji2.jsp的代码,其中select选择框是从数据库列出浙江的地市,dbInquire.ByCityDictionaryInquire()是查询数据库中地市名称。dbInquire.ByCreatorIsNullInquire()从数据库字典城市code查询各地市的人数.
http://localhost:98/tongji/tongji2.jsp我键入浏览器,跳出java.nullpointerException。我查找问题一个下午。问题是
请看if ( request.getParameter("city").equals("")||request.getParameter("city")==null)这句,如果写成if (request.getParameter("city")==null ||request.getParameter("city").equals(""))就对了。奇怪了,System.out.println("city参数值" + request.getParameter("city"));打印确实是null为什么if ( request.getParameter("city").equals("")||request.getParameter("city")==null)这句不能判断?是不是因为request.getParameter("city")处理这个参数原因呢?
...全文
453 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bing 2010-04-06
  • 打赏
  • 举报
回复
恩,学习了,null!=str1先判断下,否则问题严重。
wula0010 2009-01-22
  • 打赏
  • 举报
回复
肯定是先判断null再判断其他情况
Jacky_Zhu_1983 2009-01-22
  • 打赏
  • 举报
回复
null.equals()是不允许的...
xinyung 2009-01-22
  • 打赏
  • 举报
回复
lz不错
xinyung 2009-01-22
  • 打赏
  • 举报
回复
lz不错
Bing 2009-01-22
  • 打赏
  • 举报
回复
String str1 = null; str引用为空
String str2 = ""; str应用一个空串

也就是null没有分配空间,""分配了空间,因此str1还不是一个实例化的对象,儿str2已经实例化。

注意因为null不是对象,""是对象。所以比较的时候必须是 if(str1==null){....}和if(str2.equals("")){}

对象用equals比较,null用等号比较。因此,如果str1=null;下面的写法错误:
if(str1.equals("")||str1==null){//如果str1没有值,则....
//。。。。
}

正确的写法是 if(str1==null||str1.equals("")){ //先判断是不是对象,如果是,再判断是不是空字符串
//...
}
也可以写成if("".equals(str1)||str==null){}这个顺序可以调换

网上找了下以上问题原因,和大家分享。
fondOfJava 2009-01-21
  • 打赏
  • 举报
回复
request.getParameter("city").equals("")||request.getParameter("city")==null
应该是断路了吧.后面的一句不判断了。
kaka_feild 2009-01-21
  • 打赏
  • 举报
回复
这是短路或,把request.getParameter("city")==null放到前面,返回结果为true,它就不往下执行
如果request.getParameter("city").equals("")放在前面,request.getParameter("city")为空,调用它的equals方法自然会报空指针异常
xinyung 2009-01-21
  • 打赏
  • 举报
回复
當request.getParameter("city")為null的時候已經為空了,怎么可以再調用equals這個方法???
看一下||這個符號的用法就知道了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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