我创建了一个索引页面,您在其中取复选框的值并将其传递给名为AddToWork.java的文件,但它显示空指针异常。传递复选框的值有一些问题。请帮助。这是为索引页
剪切的代码<td>
<center>
<form action="addtowork?id2=<%=mail.getTempToken()%>" method="post">
<input type="submit" value="Add to my work">
<input type="checkbox" name="flag" value="flag">High Priority</form>
</center></td>
for AddToWork.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
EmailDesc mail = new EmailDesc();
String imp = new String();
imp = (String) request.getParameter("flag");
String thisid = request.getParameter("id2");
Home home = new Home();
User user = new User();
user = (User) request.getSession().getAttribute("user");
mail = home.getEmail(thisid, user);
home.givePermanentToken(mail,thisid);
if (imp.equals("flag")){
System.out.println("Priority Changed to " + mail.getPriority() + "!");
}
response.sendRedirect("index1.jsp");
}
如果我删除addtowork.java中的if语句,则代码运行完美。
答案 0 :(得分:2)
这是因为你的“imp”对象指向什么(null)&amp;这是一个例外。像这样使用“尤达符号”
if("flag".equals(imp)){
// your code
}
这消除了获得空指针异常的可能性
答案 1 :(得分:1)
案例1:name.equals(&#34; Java&#34;)将未知值与已知值进行比较。
我们将name(unknown)
值与另一个字符串Java(known)
值进行比较。 name将根据一些数据库调用,调用另一个方法等来决定...有可能你得到名称的空值和java.lang.NullPointerException
的可能机会,或者你必须明确检查名称的空值。
案例2:&#34; Java&#34; .equals(名称)将已知值与未知值进行比较。
我们将Java(known)
值与另一个字符串name(unknown)
值进行比较。同样的方式名称将根据一些数据库调用,调用另一个方法等来决定...但equals
和equalsIgnoreCase
方法的String将处理null
值并且你不会...必须明确检查名称的空值。
在你的情况下
/* You are getting `null` for variable `imp` */
imp = (String) request.getParameter("flag");
更改
if (imp.equals("flag")){
System.out.println("Priority Changed to " + mail.getPriority() + "!");
}
到
if ("flag".equals(imp)){
System.out.println("Priority Changed to " + mail.getPriority() + "!");
}
答案 2 :(得分:0)
案例I:当您通过选中复选框提交表单时,它将起作用,因为该值已在请求参数flag
中设置
案例II:当您提交表格而未检查&#34;优先级&#34;复选框然后请求参数设置为null,然后在条件时调用null方法上的equal方法。所以请使用
if("flag".equals(imp))
注意: - 使用新的
创建字符串是不好的做法String imp = new String(); //bad don't use this
String imp = ""; //use in this way