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.Не уверен, что это правильный подход, так как я получаю исключение нулевого указателя?