2017-03-16 121 views
0

我使用Java和sql创建了用户管理(创建,读取,更新,删除)。 这是我道:单击提交时出现空指针异常

private static final String UPDATE = "UPDATE user set login_user=?, pwd_user=?, id_role=? where id_user=? "; 

@Override 
public void update_user(User user) throws DAOException { 
    Connection connexion = null; 
    PreparedStatement preparedStatement = null; 
    ResultSet resultSet = null; 

    try { 
     connexion = (Connection) dao_factory.getConnection(); 
     preparedStatement = connexion.prepareStatement(UPDATE); 
     preparedStatement.setString(1, user.getLogin()); 
     preparedStatement.setString(2, user.getPwd()); 
     preparedStatement.setInt(3, user.getRole()); 
     preparedStatement.setLong(4, user.getId_user()); 
     preparedStatement.executeUpdate(); 


    } catch (SQLException e) { 
     throw new DAOException(e); 
    } 

} 

我的jsp进行更新的用户:

<% 
if(action.equalsIgnoreCase("edit")){ 
%> 
<form method="get" action="client"> 
    <div class="form-group"> 
     <input type="text" class="form-control" id="login" name="login" placeholder="login"> 
     <a href="client?action=update&id=${ user_edit.id_user }" class="btn btn-primary">Update</a> 
    </div> 
</form> 
<% } %> 

而且我的servlet:

String action = request.getParameter("action"); 
    if (request.getParameter("action") != null && action.equalsIgnoreCase("view")) { 
     request.setAttribute("client", user_dao.find_all()); 
    } 
    if (action.equalsIgnoreCase("delete")) { 
     int id = Integer.parseInt(request.getParameter("id")); 
     user_dao.delete_user(id); 
     request.setAttribute("client", user_dao.find_all()); 
    } 
    if (action.equalsIgnoreCase("edit")) { 
     int id = Integer.parseInt(request.getParameter("id")); 
     User user = user_dao.getById(id); 
     session.setAttribute("user_edit", user); 
    } 
    if (action.equalsIgnoreCase("update")) { 
     Long id = Long.parseLong(request.getParameter("id")); 
     String login = request.getParameter("login"); 
     User user = new User(); 
     user.setLogin("test_login"); 
     user.setPwd("test_pwd"); 
     user.setRole(1); 
     user.setId_user(id); 
     user_dao.update_user(user); 
    } 
    else { 
     request.setAttribute("client", user_dao.find_all()); 
    } 

    this.getServletContext().getRequestDispatcher(VUE).forward(request, response); 

我的第一个问题是,当我在点击“更新“, 这行得通。但如果我按回车,我有一个空指针异常

第二个问题是,如果我想要恢复登录用户String login = request.getParameter("login");user.setLogin(login);登录值在数据库为空。

非常感谢

编辑: 这里堆栈跟踪:

Avertissement: StandardWrapperValve[client]: Servlet.service() for servlet `client threw exception` 
java.lang.NullPointerException 
at egame.servlets.admin.client.processRequest(client.java:53) 
at egame.servlets.admin.client.doGet(client.java:94) 
  • 线53:if (action.equalsIgnoreCase("delete"))
  • 线94是空
+0

什么是堆栈跟踪?你做了什么来调试它? – Carcigenicate

+0

a添加了堆栈。谢谢 – Snake

回答

0

结果集的resultSet = NULL; 更新用户被调用后,它仍为空。

在任何情况下,你是在试图访问

servlet将始终调用了request.setAttribute( “客户端”,user_dao.find_all());

如果除非您希望它只发生在非更新情况下,否则使用else。

0

您的HTML/JSP错误。你创建一个HTML表单,但你所说的“按钮”实际上只是一个独立的链接。这是你提到的这两个问题的原因:

  1. 当你点击链接形式不提交
  2. 按Enter键后,提交表单,但没有数据你把网址

您需要将其更改为类似

<% 
if(action.equalsIgnoreCase("edit")){ 
%> 
<form method="post" action="client"> 
    <div class="form-group"> 
     <input type="text" class="form-control" id="login" name="login" placeholder="login"> 

     <input type="hidden" id="action" value="update" > 
     <input type="hidden" id="id" value="${ user_edit.id_user }" > 
     <button type="submit" class="btn btn-primary">Update</a> 
    </div> 
</form> 
<% } %> 

侧节点:NEVER使用HTTP GET将任何更改提交给服务器。如果您更改服务器上的数据,它应该是POST(或DELETE,或PUT,但不是GET)。