2015-06-28 2 views
0

У меня есть следующая форма в моем JSP. Это возвращающий HTTP Status 500.HTTP Status 500 - NullPointerException

<form:form action="poll1" modelAttribute="poll1" method="post"> 
       <table> 
        <tr> 
         <td><b><i>Poll #1</i></b></td> 
        </tr> 
        <tr> 
         <td>Would you like to have a 30-year reunion in 2016?<br> 
         </td> 
        </tr> 
        <tr> 
         <td><form:radiobutton path="vote" value="yes" />Yes <form:radiobutton 
           path="vote" value="no" />No</td> 
        </tr> 
        <tr> 
         <td><input name="submit" type="submit" 
          value="Vote Poll #1" align="left" /></td> 
        </tr> 
       </table> 
      </form:form> 

Он сопоставляет к следующему методу в моем классе контроллера, и я пометил строку, где я получаю NullPointerException.

@RequestMapping(value = "/poll1", method = RequestMethod.POST) 
public String processPoll1(@RequestParam String vote, 
     HttpServletResponse response, Model model) { 
    Map<String, Object> resultMap = poll1DAO.tallyVote(vote); 
    Cookie poll1 = new Cookie("poll1", "voted"); 
    // Next line has the error 
    model.addAttribute("poll1Yes", resultMap.get("yes").toString()); 
    model.addAttribute("poll1No", resultMap.get("no").toString()); 
    poll1.setMaxAge(maxSeconds); 
    response.addCookie(poll1); 
    return "redirect:/polls"; 
} 

Следующий код из моего класса DAO, и я считаю, что возвращается нуль, но я не могу понять, почему.

public Map<String, Object> tallyVote(String vote) { 
    int votes; 

    try { 
     votes = this.getJdbcTemplate().queryForInt(
       "select " + vote + " from poll1 where id = 1") + 1; 
     this.getJdbcTemplate().update(
       "update poll1 set " + vote + " = " + votes 
         + " where id = 1"); 
     Map<String, Object> returnMap = getVotes(); 
     return returnMap; 
    } catch (DataAccessException e) { 
     System.out.println(e.toString()); 
    } 

    return null; 
} 

Вот мой стек исключения.

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    org.springframework.web.servlet.FrameworkServlet.finalizeProcessing(FrameworkServlet.java:947) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:893) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:792) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
root cause 

java.lang.NullPointerException 
    com.controller.PollController.processPoll1(PollController.java:65) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:647) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:603) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:859) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:883) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:792) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
+0

Загрузите стек исключений. – BonanzaOne

+2

Ваш код действительно опасен: если он страдает от SQL-инъекции: голосование по строкам может быть любой строкой (с точки зрения хакера) и сразу же объединяется в ваш запрос. Таким образом, теоретически оператор удаления может быть отправлен в вашу базу данных или случайные вставки и т. Д. –

ответ

0

Я решил свою проблему. У меня был неверный URL-адрес и информация для входа в базу данных. Поставка правильной информации решила проблему. Спасибо всем, кто ответил.

0

Можете ли вы установить свой отладчик на линию прямо перед этой линией?

model.addAttribute("poll1Yes", resultMap.get("yes").toString()); 

Я подозреваю, что resultMap.get ("yes") - это часть, которая возвращает null. Затем вы вызываете toString(), вызывая NPE). тем более, что у вас есть Map resultMap = poll1DAO.tallyВече (голосование); , который может вернуть пустую карту.

Чтобы быть уверенным, что вам нужно будет отложить отладчик прямо над указанной вами строкой. Оформить заказ этого руководства http://www.wikijava.org/wiki/Debugging_a_servlet_with_tomcat_and_Eclipse_tutorial для получения более подробной информации о том, как отлаживать ваш сервлет.

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