Исключение нулевого указателя в JSFUtils.resolveExpression("#{sessioncontext}") в сервлете

Я работаю с сервлетами и пытаюсь получить контекст сеанса, используя метод JSFUtils.resolveExpression("#{sessioncontext}") в ADF, но он дает мне исключение нулевого указателя. Что не так с использованным выше методом и есть ли другой способ получения сессионного контекста в моем сервлете?

Спасибо,

Изменить: пожалуйста, найдите код ниже,

public class MyServlet extends HttpServlet {


public final void init(final ServletConfig config) throws ServletException {
    super.init(config);
}

public void doGet(HttpServletRequest request,
                HttpServletResponse response)
        throws ServletException, IOException
{
    response.setContentType("text/html");
  PrintWriter out = response.getWriter(); 
 SessionContext session = (SessionContext) JSFUtils.resolveExpression("#{sessioncontext}");
  //more code below

  }
}

2 ответа

Решение

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

FacesContext facesContext = FacesContext.getCurrentInstance();
    if (facesContext == null) {
        FacesContextFactory contextFactory =
            (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
        LifecycleFactory lifecycleFactory =
            (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
        Lifecycle lifecycle =
            lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
        facesContext =
                contextFactory.getFacesContext(request.getSession().getServletContext(),
                                               request, response,
                                               lifecycle);
        // Below is an Inner Class which extends FacesContext to use its below protected method
        AbstractInnerFacesContext.setFacesContextAsCurrentInstance(facesContext);
    }

Теперь, так как у меня есть FacesContext, я могу легко извлечь из него SessionContext, используя ту же логику, что и метод resolExpression:) (Yay!!!)

Ваш сервлет не может получить доступ к FacesContext, если вы не используете URL-адрес сопоставления сервлета Faces.

Например, в любом приложении oracle ADF по умолчанию сопоставление URL-адреса JSF-сервлета по умолчанию - /face /*. Поэтому, если вы установите для своего сервлета такое же отображение, контекст Faces не будет иметь значение null.

например, сделайте так, чтобы ваш URL-адрес сервлета был похож на следующий /face /myCoolServlet, и он будет работать нормально.

Другие вопросы по тегам