【问题标题】:Null pointer exception in passing checkbox value传递复选框值时出现空指针异常
【发布时间】:2023-03-31 10:20:01
【问题描述】:

我创建了一个索引页面,您可以在其中获取复选框的值并将其传递给名为 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>

对于 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 语句,代码运行完美。

【问题讨论】:

  • request.getParameter("flag") 以某种方式变为 null,然后执行 ` if (imp.equals("flag"))` 实际上导致 NullPointerException

标签: java jdbc checkbox


【解决方案1】:

这是因为您的“imp”对象没有指向任何内容(null)并且它正在引发异常。像这样使用“尤达符号”

if("flag".equals(imp)){
     // your code
}

这消除了获得空指针异常的可能性

【讨论】:

    【解决方案2】:

    案例1:name.equals("Java") 比较未知值和已知值。

    我们将name(unknown) 值与另一个字符串Java(known) 值进行比较。 name 将根据一些数据库调用、调用另一个方法等来决定...您可能会得到 name 的 null 值和java.lang.NullPointerException 的可能机会,或者您必须明确检查 name 的 null 值。

    案例 2:“Java”.equals(name) 比较已知值和未知值。

    我们将Java(known) 值与另一个字符串name(unknown) 值进行比较。相同的方式名称将根据某些数据库调用、调用另一个方法等来确定...但是 String 的 equalsequalsIgnoreCase 方法将处理 null 值,您不必显式检查 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() + "!");
    }
    

    【讨论】:

    • 感谢您的概念! :)
    【解决方案3】:

    案例一:当你提交表单并勾选复选框时,它会起作用,因为该值是在请求参数flag中设置的

    案例二:当您提交表单时未选中“优先级”复选框,则请求参数设置为 null,然后您在 if 条件下调用 null 上的 equal 方法。所以请使用

    if("flag".equals(imp))
    

    注意 :- 使用 new 创建字符串是不好的做法

    String imp = new String(); //bad don't use this
    String imp = ""; //use in this way
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2018-01-31
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多