關(guān)于空指針錯誤的問題
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; //用來獲取多個復(fù)選按鈕的值 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); //跳轉(zhuǎn)到注冊成功頁面 request.getRequestDispatcher("../userinfo.jsp").forward(request,response); } catch(Exception?ex) { ex.printStackTrace(); } }
一下兩行代碼 為什么使用第二行代碼時不勾選復(fù)選框就會報(bào)空指針異常 而用第一行代碼就能夠正常返回false呢? ?我的理解: 當(dāng)不勾選時request.getParameter("isAccept").equals("true")該表達(dá)式的值為假那么則返回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; 這樣既符合你的寫法,也不會報(bào)空指針
2015-12-30
isAccept這個復(fù)選框你不勾選的時候是不會傳任何數(shù)據(jù)過來的。所以服務(wù)器用request.getParameter("isAccept")取得的是null。這是個經(jīng)驗(yàn),記得就行了