Java servlet接受复选框中的空值

Java servlet接受复选框中的空值,java,jsp,servlets,jakarta-ee,java-ee-6,Java,Jsp,Servlets,Jakarta Ee,Java Ee 6,这里我有一个jsp页面,允许用户应用他的姓名、年龄和掌握的编程语言 <form action="./getPost" method="POST" > <label> name </label> <input type="text" name="name" > <br><br> <label> age </label> &nbsp <input type="

这里我有一个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>
当我填写表单的所有字段并单击按钮时,它会将数据插入数据库。 然后,我测试了在没有选中任何导致错误的复选框的情况下提交它(java.lang.NullPointerException)。 问题是,如果用户想选择或不选择,我想保留这个可选的方法。
那么如何使servlet处理空值呢​​从复选框中选择如何解决此问题:

选项1:(发送空字符串而不是空字符串) 假设您的表在字段
fav
上有一个NOTNULL约束

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
错误原因



您的数据库不希望字段
常用语言上出现空值

如何解决此问题:

选项1:(发送空字符串而不是空字符串) 假设您的表在字段
fav
上有一个NOTNULL约束

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
错误原因



您的数据库不希望字段
最喜爱的语言上出现空值

//有一个建议:处理空值并用空字符串替换

 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"));

我希望它能对您有所帮助。

//有一个建议:处理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"));

我希望它能帮助您。

在这里帮助我们获取完整日志…您的意思是服务器显示了什么?是的,您在服务器上得到的错误?我已经添加了它,顺便说一下,它是法语的。我假设您只希望fav的值为空,而不是名称和年龄?您是否检查了fav字段上是否有任何空约束?请在此处帮助我们获取完整日志…您的意思是服务器显示了什么?是的,您在服务器上得到的错误?我已经添加了它,顺便说一下,它是法语的。我假设您只希望fav为空值,而不是名称和年龄?您是否检查了fav字段上是否有任何空约束?是的,“InsertPost.add(…)”已被try-catch块包围。我只是没有在此处打印它,以便仅显示代码。在我的表格中,我没有指出约束条件(非常棒,我想你已经彻底阅读了发布问题的指南,非常感谢。)是的,“InsertPost.add(…)”已经被try-catch块包围了,我只是没有在这里打印它,只是为了显示代码。在我的表格中,我没有指出约束条件(非常棒,我想你已经彻底阅读了发布问题的指南,非常感谢。)