当前位置: 代码迷 >> Java Web开发 >> 为什么小弟我的会报NullPointerException
  详细解决方案

为什么小弟我的会报NullPointerException

热度:36   发布时间:2016-04-16 22:05:08.0
为什么我的会报NullPointerException

首先这个是我的JSP页面:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>美讯购物网</title>
</head>
<body bgcolor="yellow">
<table align="center">
<div id="top">
<label style="font-weight: bold"><marquee>商品添加页面</marquee></label>


<div id="form">
<form action="/t31/GoodSer" method="post" enctype="multipart/form-data">
<div id="infor">
<div id="inputs2">
<span>商品名称:</span>
<span><input type="text" name="gname" id="gname" /> </span>
<span id="gnameError">*</span>
</div>
</div>


<div id="infor">
<div id="inputs1">
<span>商品单价:</span>
<span><input type="text" name="gprice" id="gprice" /> </span><span
id="gpriceError">*</span>
</div>
</div>

<div id="infor">
<div id="inputs1">
<span>商品图片:</span>
<span><input type="file" name="gpic" /> </span>
</div>

<div id="infor">
<div id="inputs1">
<span>是否推荐:</span>
<input type="radio" name="giscommend" value="true"/>是 
<input type="radio" name="giscommend" value="false" checked="checked"/>否
</div>
<div id="inputs2">
<span>是否有效:</span>
<span> 
<input type="radio" name="gisopen" value="true" checked="checked" />是 
<input type="radio" name="gisopen" value="false" />否
</span>
</div>
</div>
<div id="inputs2">
<span>商品类别:</span>
<select name="cid" id="cid">
<c:forEach items="${applicationScope.categorys}" var="category">
<option value="${category.cid}">${category.ctype}</option>
</c:forEach>
</select>
</div>
</div>
<div id="textarea1">
<span id="mesage">产品描述:</span>
<span> <textarea rows="4" cols="64" name="gremark">
  </textarea> </span>
</div>

<div id="textarea1">
<span id="mesage">详细介绍:</span>
<span> <textarea rows="5" cols="64" name="gxremark">
  </textarea> </span>
</div>
<div align="center"><input type="submit" value="添加" width="40px"/></div>
</form>
</div>
</div>
</table>
<input type="hidden" name="status" value="saveGoodss">
</body>
</html>




这个是我的Servlet
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletExceptionIOException {
String status = request.getParameter("status");
if(status.equals("saveGoodss")){    //这里有问题
Goods goods = new Goods();
goods.setGname(request.getParameter("gname"));
String str = request.getParameter("gprice");
double gprice = Double.parseDouble(str);
goods.setGprice(gprice);
goods.setGpic(request.getParameter("gpic"));
goods.setGiscommend(Boolean.parseBoolean(request.getParameter("giscommend")));
goods.setGisopen(Boolean.parseBoolean(request.getParameter("gisopen")));
goods.setCategory((Category)request.getSession().getAttribute("category"));
goods.setGremark(request.getParameter("gremark"));
goods.setGxremark(request.getParameter("gxremark"));
goodsImpl.saveGoods(goods);
response.sendRedirect("/t31/admin/saveGoods.jsp");
}
}
------解决方案--------------------
你的form中没有定义status字段
String status = request.getParameter("status"); 取到的status为空

<input type="hidden" name="status" value="saveGoodss"> 已经定义到form外面了
自然 不能随请求一起带到后台了

------解决方案--------------------


request 获取的是 form表单里面的内容。   
你把   String status = request.getParameter("status");  放到form表单里面就可以了
------解决方案--------------------
"saveGoodss".equals(status)
你最好这么写,可以避免ullPointerException
你可以检查下你的前台有没有把status这值传过来
------解决方案--------------------
引用:
"saveGoodss".equals(status)
你最好这么写,可以避免ullPointerException
你可以检查下你的前台有没有把status这值传过来

说的很有道理,问题就在这里,楼主平时在编写代码的习惯上要注意一点,能够通过代码的规范减少代码的出错率.这也是一种能力.
  相关解决方案