Java NullPointerException в строке HttpServletResponse - PullRequest
0 голосов
/ 26 ноября 2011

Хорошо. Я запускаю приложение JSf и получаю сообщение об ошибке NullPointerException в строке 220, которая

response.setContentType("text/html");

, не знаю, почему это может быть проблемой.Полный метод, в котором присутствует строка, приведен ниже:

    public void reserveDates(String eventTitle, Date startDate, 
        Date endDate, String requestType, int terminals,
        String lastName, String firstName, String middleInitials,
        int badgeNo, String networkID, String telephoneNo,
        String orgCode, String justification)
        throws ServletException, IOException{

    MapCreation mapCreate = new MapCreation(startDate, endDate);
    newMap = mapCreate.getDatesTreeMap();
    MapStorage mapStore = new MapStorage();
    mapStore.storeMap(newMap);
    //create instance of reservation class
     rsvObj = new Reservation(eventTitle, startDate, 
            endDate, requestType, terminals, lastName, firstName, 
            middleInitials, badgeNo, networkID, telephoneNo,
            orgCode, justification);
    boolean possible = rsvObj.checkRange();
    if(possible == true)
    {
        try{
        HttpServletResponse response = null;
        response.setContentType("text/html");
        response.sendRedirect("main");
        CreateTempStorage();
        }catch(IOException ioe){
            System.err.print(ioe);
        }
    }else if(possible == false){
        try{
        HttpServletResponse response = null;
        response.setContentType("text/html");
        response.sendRedirect("error");
        }catch(IOException ioe){
            System.err.print(ioe);
        }
    }

}

Ps: ответ, дающий ошибку, находится в первом условии, где я проверяю (возможно == true)

Iя просто пытаюсь использовать ответ для перенаправления на страницы, упомянутые либо "основной" или "ошибка", я ценю поддержку.Спасибо!

Ответы [ 6 ]

3 голосов
/ 26 ноября 2011

response является нулевым в этой точке.Вы устанавливаете это прямо на линии раньше.

Вам нужен конкретный класс, который реализует реферат HttpServletResponse.Если у вас есть класс с именем MyHttpServletResponse, который реализует HttpServletResponse, то ваш код может выглядеть следующим образом:

MyHttpServletResponse response = new MyHttpServletResponse();

(возможно, вы хотите использовать HttpServletResponseWrapper или что-то подобное?)

3 голосов
/ 26 ноября 2011

вы инициализируете ответ на null в строке непосредственно перед тем, как будет выдано исключение

1 голос
/ 26 ноября 2011
HttpServletResponse response = null;
response.setContentType("text/html");
response.sendRedirect("main");

Вы не можете вызвать метод для объекта после того, как вы установили его на нуль.Вы не должны устанавливать ответ на ноль.Где-то должен быть объект ответа.Передайте это вашему методу.

1 голос
/ 26 ноября 2011

Где response присвоено значение?

Кроме того, ваш код имеет "плохой" стиль. Рассмотрите возможность замены этого

if (possible == true) { 
    ...
else if (possible == false) { // there is no other possibility
    ...
}

с

if (possible) {
    ...
else {
    ...
}
0 голосов
/ 26 ноября 2011

Что ж, лучший вариант ответа, я полагаю, был найден в FacesContext. Код, который заменил перенаправление в этом случае, был:

                    FacesContext facesContext = FacesContext.getCurrentInstance();
                    ExternalContext ec = facesContext.getExternalContext();
                    ec.redirect("progress.xhtml");

Надеюсь, это поможет другим. С уважением,

0 голосов
/ 26 ноября 2011

Дело в том, что если вы пишете этот код внутри servlet, то у вас уже будет объект response, в противном случае, если вы пишете этот код в любом method, тогда передайте объект response из servlet, пока вызывая метод. На самом деле нам не нужно создавать объект HttpServletResponse.

    try{
        response.setContentType("text/html");
        if(possible){
             response.sendRedirect("main");
             CreateTempStorage();
        }else{
             response.sendRedirect("error");
        }
    }catch(IOException ioe){
    System.err.print(ioe);
    }

A small improvement in code quality.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...