Передача данных между сервлетом и JSP - PullRequest
0 голосов
/ 05 октября 2010

У меня есть страница JSF / JSP, управляемый бин и отдельный файл / класс, который расширяет HttpServlet с помощью метода doPost.

У меня есть отдельная тестовая программа, которая отправляет объект xmlк методу doPost с помощью HttpURLConnection.

Что требуется:

  1. Запуск страницы JSP с временными данными (работами).
  2. Припозже отправьте новый объект xml в метод doPost (работает - я получаю данные в методе doPost).
  3. Отображение новых данных в JSP (не работает).

Примечания:

  1. Когда данные поступают, они правильно обращаются к методу doPost.
  2. Метод doPost выполняет request.getRequestDispatcher("/faces/xxx.jsp").forward(request, response); (запрос правильно загружен данными).
  3. Первоначальный метод в управляемом компоненте JSP выбран правильно.
  4. Я не могу использовать в этом никакой Javascript.EL сомнителен.

Проблема: я не нашел способа (возможно, действительно очевидного) получить объект запроса к управляемому бину JSP из сервлета.

Вопрос: КакJSP извлекает объект запроса и передает объект запроса управляемому бину?Есть ли где-нибудь пример с конца до конца?- не нашел ни одного.

Ответы [ 3 ]

1 голос
/ 06 октября 2010

У меня есть страница JSF / JSP, управляемый компонент и отдельный файл / класс, расширяющий HttpServlet с помощью метода doPost.

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


Что касается вашего фактического проблема: если предположить, что вы на самом деле имели в виду «атрибут запроса», когда говорили «объект запроса», который на странице JSF кажется недоступным, то для этого могут быть только две причины: либо имя атрибута неверное, либо это не bean-компонент/ pojo экземпляр, который вы ожидаете (что может произойти, если вы создадите несколько экземпляров).

0 голосов
/ 06 октября 2010

Предполагая, что вы используете JSF, вы можете сделать что-то очень простое из вашего управляемого компонента - просто передать данные в виде атрибута в запросе, а затем отправить их в желаемый сервлет:

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
request.setAttribute("myData",myData);
context.getExternalContext().dispatch("/MyServlet");
context.responseComplete();

В вашем сервлете:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String myData = (String)req.getAttribute("myData"); 
    //Do something with myData  }
0 голосов
/ 05 октября 2010

Вы просто не знаете, как получить запрос из управляемого компонента?Если так, попробуйте это изнутри метода действия в вашем управляемом компоненте:

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletRequest request = (HttpServletRequest)externalContext.getRequest();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...