java - servlet 接受复选框中的空值

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

enter image description here这里我有一个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 处理复选框中的空值

最佳答案

如何解决这个问题:

选项 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

注意:

You should put the InsertPost.add(...) call in a try-catch block to handle exception during inserting data to DB and then show it on UI as a part of best practices. Also, put a check if the name and age are null and handle it.

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

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

错误原因

<小时/>

您的数据库不希望归档的最喜欢的语言为空值

关于java - servlet 接受复选框中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050569/

相关文章:

java - 在 java 中,为什么 Exception 是基类而不是 RuntimeException?

jsp - tomcat 服务缓存别名

java - 如何使用 Spring Java 在 JSP 中的文本框中保留用户名

javascript - 动态页面的disqus api

java - ServletResponse#flushBuffer() 包括什么?

java - JSP - 文件名、目录名或卷标语法不正确

java - 正则表达式删除括号

java - 如何在 Java 中实现 OpenID

java - 防止并发方法执行

java - 这里如何使用Gson将列表发送回jsp页面?