Отправка HttpServletrequest к сервлету лиц - PullRequest
0 голосов
/ 19 октября 2018
public void dispatch1(String path) {
        HttpServletRequest request = (HttpServletRequest).getRequest();
        boolean dontRender = false;
        if (request.getSession().getAttribute("dontRender") != null) {
            dontRender = (boolean) request.getSession().getAttribute("dontRender");
        }
        RequestDispatcher requestDispatcher = request.getRequestDispatcher(path);
        HttpServletResponse response = (HttpServletResponse) getResponse();
        ServletResponse response = response;

        FacesContext facesContext = FacesContext.getCurrentInstance();

        try {
            if (response.isCommitted()) {
                requestDispatcher.include(request, response);
            } else {
                if (!dontRender) {

                    requestDispatcher.forward(request, response);

                } else {
                    // Dont render response
                    // create a new httpservlet request with savebutton clicked and send to faces
                    // servlet
                    Runnable runner = new Runnable() {
                        public void run() {
                            HttpServletRequest req = (HttpServletRequest).getRequest();
                            HttpServletResponse resp = (HttpServletResponse) getResponse();
                            req.setAttribute("Save", "Submit Q");
                            req.setAttribute("action", "test2.jsf");

                            try {
                                req.getRequestDispatcher("test1.jsf").forward(req, resp);

                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            } catch (ServletException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                        }
                    };
                    Thread thread = new Thread(runner);
                    thread.start();
                }

            }
        }

        catch (ServletException e) {
            e.printStackTrace();
            throw new FacesException(e);
        }
    }
test1.jsp
    <input name="Save" id="Save"  type="submit" value="Submit Q">

Если установлен dontRender, я не хочу отправлять ответ клиенту, но я хочу создать сообщение HttpServletRequest, которое соответствует тому, что браузер обычно отправляет, когда пользователь нажимает кнопку сохранения в test1.jsp, а затем отправляетэто сервлет Faces.Не уверен, что это правильный подход, так как я получаю исключение нулевого указателя?

...