getParameterValues有时会从隐藏输入

时间:2017-08-27 15:13:49

标签: java mysql jsp servlets

我有一个网站,当用户提交表单时我在.jsp文件中使用了表单,操作转到servlet,将数据插入到数据库中。有时它工作正常没有任何问题,有时甚至用户提交的表单没有插入数据库中,并在第154行抛出NullPointerException。

org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for 
servlet [NewServlet] in context with path [] threw exception
java.lang.NullPointerException
at org.example.test.NewServlet.processRequest(NewServlet.java:154)

的index.jsp

<form action="NewServlet" method="post">
<table>
<tbody>
<tr>
<td><sql:query dataSource="${snapshot}" var="subjects1">
SELECT * FROM glf2 ORDER BY RAND()LIMIT 1
</sql:query>
<c:set var="comments_m1" value="${subjects1.rows[0]}"/>
${comments_m1.comment_message} 
</td>
</tr>
<tr>
<td><sql:query dataSource="${snapshot}" var="subjects2">
SELECT * FROM egy ORDER BY RAND()LIMIT 1
</sql:query>
<c:set var="comments_m2" value="${subjects2.rows[0]}"/>
${comments_m2.comment_message} 
</td>
</tr>
</tbody>
</table>
<input type="hidden" name="com" value="${comments_m1.comment_message}"/>
<input type="hidden" name="com" value="${comments_m2.comment_message}"/>
<input type="submit" value="submit">  
</form> 

从数据库中选择并在屏幕上显示的注释消息,用户需要选择一些选项,然后将注释消息和用户选项发送到servelt以插入到数据库表中。

newservlet.java根据日志文件中的getParametersValues

中的问题
try (PrintWriter out = resp.getWriter()) {
comment1= req.getParameterValues("com");
for(int z=0; z<comment1.length;z++)
comment[z] = new String(comment1[z].getBytes("ISO-8859-1"),"UTF-8"); 

任何人都可以建议我如何解决问题。

3 个答案:

答案 0 :(得分:0)

您的查询不一定会返回comment_message不为空的记录。

因此,例如,您可能需要添加空检查。

if (comment1 != null) {
    for (int z=0; z<comment1.length;z++)
    comment[z] = new String(comment1[z].getBytes("ISO-8859-1"),"UTF-8"); 
}

答案 1 :(得分:0)

在插入之前,从参数的值中检查Null,

boolean comBool = comment1.equals("") || comment1.length<0 ;
if(!comBool){
       //Do the insertion into database
}else{
//the value from entered field is null
}

这将解决您的NullPointerException

答案 2 :(得分:-1)

您实际上在表单中对输入标记使用相同的名称,因为编译器可能会对要获取的值感到困惑。

您应该检查两个输入标签的命名方式。它应该工作。