NullpointerException в getExternalContext в FacesContext - PullRequest
1 голос
/ 28 ноября 2011

Я попытался получить внешний контекст из FacesContext следующим образом и получил NullPointerException:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();

Что может вызвать проблему?

1 Ответ

10 голосов
/ 28 ноября 2011

Это может быть вызвано, только если FacesContext#getCurrentInstance() возвращено null. Любая попытка получить доступ или вызвать ссылку null приведет к NullPointerException. Смотрите также его javadoc :

Брошенный, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра объекта null.
  • Доступ или изменение поля объекта null.
  • Взять длину null, как если бы это был массив.
  • Доступ или изменение слотов null, как если бы это был массив.
  • Бросок null, как если бы это было значение Throwable.

Приложения должны генерировать экземпляры этого класса, чтобы указать на другое незаконное использование объекта null.

То, что FacesContext#getCurrentInstance() возвращает null, в свою очередь, может быть вызвано, только если эта строка кода не была выполнена внутри контекста JSF, т.е. когда код не выполняется во время HTTP-запроса, который обслуживается FacesServlet, который отвечает за создание FacesContext как ThreadLocal. Например, внутри простого сервлета, фильтра сервлета или слушателя сервлета или любого другого кода, который не выполняется во время HTTP-запроса, выполняющего FacesServlet.

Способ ее правильного решения зависит от функциональных требований, которые не ясны из вопроса. Как правило, вы должны либо убедиться, что HTTP-запрос проходит через FacesServlet, либо получить доступ к информации, которую вы ищете, альтернативными средствами, более подходящими для контекста, в котором выполняется код.

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