2014-01-04 5 views
0

Я пишу java servlet, который должен получить dvd от user_id. Но у меня проблема с NullPointerException. Кто-нибудь знает, как это исправить? Когда я попытался исправить это if (nickname != null) тогда у меня была проблема с атрибутом DVDs в request.setAttribute("dvds", dvds); БлагодаряКак исправить NullPointerException

List<Dvd> dvds; 
    try { 
     String nickname = request.getParameter("nickname"); 
     User user = userDao.getByLogin(nickname); 
     Long userId = user.getId(); 
     dvds = this.dvdDao.getDvdsByUserId(userId); 
    } catch (SQLException e) { 
     throw new ServletException("Unable to get dvds", e); 
    } 

    request.setAttribute("dvds", dvds); 
    RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/loans.jsp"); 
    dispatcher.forward(request, response); 

} 
} 


public List<Dvd> getDvdsByUserId(Long user_id) throws SQLException { 
    List<Dvd> dvds = new ArrayList<Dvd>(); 
    Connection connection = null; 
    PreparedStatement preparedStatement = null; 
    ResultSet resultSet = null; 

    try { 
     connection = getConnection(); 
     preparedStatement = connection.prepareStatement("SELECT * FROM sedivyj_dvd where user_id = ?;"); 
     preparedStatement.setLong(1, user_id); 
     resultSet = preparedStatement.executeQuery(); 

     while (resultSet.next()) { 
      Dvd dvd = new Dvd(); 
      dvd.setId(resultSet.getInt("id")); 
      dvd.setUser_id(resultSet.getString("user_id")); 
      dvd.setName(resultSet.getString("name")); 
      dvd.setBorrower(resultSet.getString("borrower")); 
      dvd.setMail(resultSet.getString("mail")); 
      dvd.setBorrow_date(resultSet.getString("borrow_date")); 
      dvd.setBorrow_until(resultSet.getString("borrow_until")); 
      dvds.add(dvd); 
     } 

    } catch (SQLException e) { 
     throw e; 
    } finally { 
     cleanUp(connection, preparedStatement); 
    } 

    return dvds; 
} 
+1

Опубликовать источник для метода 'getDvdsByUserId'it должен возвращать значение null. –

+0

Вы всегда можете исправить исключение nullpointer, если вы его не сделаете. Но на серьезной ноте вы должны опубликовать трассировку стека и более подходящие методы, в которых она генерирует исключение, чтобы мы могли вам помочь. –

+0

Stacktrace из исключения поможет много. – Spindizzy

ответ

0

Допуская nickname это проблема (также с учетом несуществующего пользователя):

List<Dvd> dvds = new ArrayList<Dvd>; 
try { 
    final String nickname = request.getParameter("nickname"); 
    if (nickname != null) { 
     final User user = this.userDao.getByLogin(nickname); 
     if (user != null) { 
      dvds = this.dvdDao.getDvdsByUserId(user.getId()); 
     } else { 
      // handle non-existent user 
     } 
    } else { 
     // handle no "nickname" parameter was present 
    } 
} catch (SQLException e) { 
    throw new ServletException("Unable to get dvds", e); 
} 

request.setAttribute("dvds", dvds); 
final RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/loans.jsp"); 
dispatcher.forward(request, response); 
0

It кажется, что для вашего кода требуется параметр «ник» в запросе для правильной работы. (Если у вас нет «никнейма», вы не можете определить идентификатор пользователя и получить DVD этого пользователя ...)

Также кажется, что вы получаете NPE, потому что в запросе отсутствует параметр (или он написан неправильно или что-то еще). Это определенно ошибка в том, что отправляет запрос.

Правильное решение будет либо:

  • отправить ошибочный ответ какой-то, если getParameter("nickname") возвращает null, И

  • исправить веб-форму, которая отправляет запросы с параметром отсутствует.

Смежные вопросы