,这里有一个jsp页面,允许用户应用他的姓名,年龄和熟练的编程语言。
<form action="./getPost" method="POST" >
<label> name </label> <input type="text" name="name" > <br><br>
<label> age </label>   <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处理复选框中的空值
答案 0 :(得分:0)
如何解决此问题:
选项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 块中,以 在向DB插入数据期间处理异常,然后将其作为最好的一部分显示在UI上 实践。另外,检查名称和年龄是否为空,并进行处理。
选项2: (发送空值并从fav
字段的表中删除空约束)
//how you are doing it previously will work.
InsertPost.add(new Post(name, age, lang));
错误原因
您的数据库不希望字段favorite languages
上为空值
答案 1 :(得分:0)
//一个建议:将null替换为空String
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"));
希望对您有帮助。