【问题标题】:servlet accept null values from checkboxesservlet 接受来自复选框的空值
【发布时间】:2019-03-07 18:29:46
【问题描述】:

这里我有一个jsp页面,允许用户申请他的名字,他的年龄和他掌握的编程语言

<form action="./getPost" method="POST" >

     <label> name </label>      <input type="text" name="name" > <br><br>
     <label> age </label> &nbsp <input type="text" name="age" > <br><br>


    <label> programming langage </label> <br>
    <input type="checkbox" name="fav" value="java"> java <br>
    <input type="checkbox" name="fav" value="php"> php <br>
    <input type="checkbox" name="fav" value="python"> python <br><br>

    <input type="submit" value="submit post">

    </form>

这就是 servlet 获取数据的方式

        String name = request.getParameter("name");
        String age = request.getParameter("age");
        String[] lang = request.getParameterValues("fav");

            InsertPost.add(new Post(name, age, lang));

当我填写表单的所有字段并单击按钮时,它会将数据插入数据库。 然后我测试提交它而不选择任何导致错误的复选框(java.lang.NullPointerException)。 问题是,如果用户想选择或不想选择,我想离开这个可选的手段。 那么如何让servlet处理来自复选框的空值

【问题讨论】:

  • 在此处帮助我们获取完整日志...
  • 你的意思是服务器显示了什么?
  • 是您在服务器上遇到的错误?
  • 我加了,顺便说一下是法文的..
  • 我假设您只期望 fav 的 null 值而不是姓名和年龄?您是否检查过您对 fav 字段是否有任何空约束?

标签: java jsp servlets jakarta-ee java-ee-6


【解决方案1】:

如何解决这个问题:

选项 1: (发送空字符串而不是 null) 假设您的表在字段 fav 上具有非空约束。

String name = request.getParameter("name");
String age = request.getParameter("age");
List<String> lang = request.getParameterValues("fav");
if(lang==null) {
    lang = new String[] {""};
}
InsertPost.add(new Post(name, age, lang));
//not recommended as it will add 1-byte of empty string even if there is no fav language

注意:

您应该将 InsertPost.add(...) 调用放在 try-catch 块中以 在将数据插入数据库期间处理异常,然后将其显示在 UI 上作为最佳的一部分 实践。另外,检查姓名和年龄是否为空并处理。

选项 2: (在fav 字段的表中发送 null 并删除 null 约束)

//how you are doing it previously will work.
InsertPost.add(new Post(name, age, lang));

错误原因


您的数据库在提交的 favorite languages 上不期望 null 值

【讨论】:

  • 是的,“InsertPost.add(...)”已经被 try-catch 块包围了,我只是没有在这里打印它只是为了显示代码。在我的表中我没有指出约束 NOT NULL
  • 太棒了,我认为您已经阅读了关于发布问题的指南,非常感谢。 :)
【解决方案2】:

//一个建议:对待null,用空字符串替换

 String name = (request.getParameter("name") == null ? "": request.getParameter("name"));
 String age = (request.getParameter("age") == null) ? "" : request.getParameter("age"));
 String[] lang = (request.getParameterValues("fav") == null) ? "": request.getParameterValues("fav"));

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2012-12-08
    • 2012-05-26
    • 1970-01-01
    • 2014-11-25
    相关资源
    最近更新 更多