關于空指針錯誤的問題
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response) throws?ServletException,?IOException?{ request.setCharacterEncoding("utf-8"); Users?u?=?new?Users(); String?username,mypassword,gender,email,introduce; boolean?isAccept; Date?birthday; String[]?favorites; SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd"); try { username?=?request.getParameter("username"); mypassword?=?request.getParameter("mypassword"); gender?=?request.getParameter("gender"); email?=?request.getParameter("email"); introduce?=?request.getParameter("introduce"); birthday?=?sdf.parse(request.getParameter("birthday")); isAccept=request.getParameter("isAccept")!=null?true:false; //用來獲取多個復選按鈕的值 favorites?=?request.getParameterValues("favorite"); u.setUsername(username); u.setMypassword(mypassword); u.setGender(gender); u.setEmail(email); u.setFavorites(favorites); u.setIntroduce(introduce); u.setFlag(isAccept); u.setBirthday(birthday); //把注冊成功的用戶對象保存在session中 request.getSession().setAttribute("regUser",?u); //跳轉到注冊成功頁面 request.getRequestDispatcher("../userinfo.jsp").forward(request,response); } catch(Exception?ex) { ex.printStackTrace(); } }
一下兩行代碼 為什么使用第二行代碼時不勾選復選框就會報空指針異常 而用第一行代碼就能夠正常返回false呢? ?我的理解: 當不勾選時request.getParameter("isAccept").equals("true")該表達式的值為假那么則返回false ?
?isAccept=request.getParameter("isAccept")!=null?true:false;
isAccept=request.getParameter("isAccept").equals("true")?true:false;
2015-12-30
一般這種情況這樣寫比較合理isAccept="true".equals(request.getParameter("isAccept"))?true:false; 這樣既符合你的寫法,也不會報空指針
2015-12-30
isAccept這個復選框你不勾選的時候是不會傳任何數據過來的。所以服務器用request.getParameter("isAccept")取得的是null。這是個經驗,記得就行了