JSF — Как обрабатывать данные в компоненте после перенаправления в представление JSF из сервлета

#java #jsf #servlets

#java #jsf #сервлеты

Вопрос:

В принципе, у меня есть представление, в котором пользователь вводит некоторую информацию и отправляет ее. Эта информация будет отправлена третьей стороне, которая будет обрабатывать данные. Третья сторона отправит мне результат обратно, и я перехвачу его в сервлете. Теперь, чтобы продолжить работу в моем приложении, в зависимости от результата, который был отправлен мне третьей стороной, мне нужно проверить значение, полученное моим сервлетом в одном из моих сеансовых компонентов (причина, по которой я не могу проверить это значение непосредственно в сервлете, заключается в том, что мне нужны некоторыеинформация из моих компонентов), поэтому мой вопрос в том, как я могу это сделать, не имея возможности получить доступ к FacesContext из сервлета?

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

Это то, что у меня есть прямо сейчас:

 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws 
ServletException, IOException
{
    try
    {
        req.setCharacterEncoding("UTF-8");
        String response = req.getParameter( "response");
        HttpSession sess = req.getSession();

        MyBean myBean= (MyBean) sess.getAttribute("myBean");

        //I am setting the response in my bean here, so I can 
        //use it later to verify its value and move on the user within 
        //the application depending of the value
        myBean.setResponse(response);

        resp.sendRedirect("view1.jsf");
    }
    catch (Exception e)
    {
    }
 

Это действительно работает, и я перенаправляюсь на view1, однако я не знаю, как вызвать компонент, который я хочу проверить ответ оттуда.

Любая помощь была бы очень признательна здесь. (Если мне повезет, я мог бы получить некоторые идеи от @BalusC ;))

Комментарии:

1. Если это компонент, управляемый JSF, разве вы не можете вызвать его, используя #{MyBean} в представлении?

2. @Nikhil Talreja Абсолютно да. Это компонент, управляемый JSF, и я мог бы использовать #{MyBean} . Но моя цель — проверить ответ, полученный сервлетом сразу после его получения, не требуя каких-либо действий со стороны пользователя.

3. Какой компонент вы пытаетесь вызвать, из какой части вашего кода xhtml, сервлета?

4. Нужно ли вызывать метод в компоненте JSF внутри сервлета?

5. Пока я могу передавать значение, полученное сервлетом, обратно в мой контекст JSF, чтобы использовать его в своих компонентах, я могу вызвать свой метод проверки в компоненте либо из сервлета, либо нет. В основном то, чего я пытаюсь достичь здесь, — это 2-факторная аутентификация. Как только пользователь войдет в систему со своими учетными данными, третья сторона будет взаимодействовать с пользователем, а затем отправлять результат этого взаимодействия сервлету. В зависимости от результата мне нужно либо войти в систему пользователя, либо отправить его обратно на шаг аутентификации 1. Так что в основном мне просто нужно передать значение обратно в сервлет и завершить работу.