Requesting a dispatcher is just the first step. You also have to actually forward.
request.getRequestDispatcher(PAGE_OK).forward(request, response);
return;
Question
I moving from projects page to see tasks for current project.
I need to redirect to tasks page for chosen project. It is redirected to ok url, but page isn't displayed. It shows white page:
URL is correct and parameter is passed correct.
Here is snipped of projectTable.jsp
:
<form action="${pageContext.request.contextPath}/manager/projectstable" method="post" id="projectstable-form">
<div class="row">
<div class="table-responsive tile col-md-10 col-sm-12 col-xs-12 col-md-offset-1">
<table class="table table-striped table-hover">
<!-- Table -->
<thead>
<tr>
<th></th>
<th>#</th>
<th><fmt:message key="project.name" /></th>
<th><fmt:message key="project.description" /></th>
<th><fmt:message key="project.notes"/></th>
<th><fmt:message key="project.tasks"/></th>
</tr>
</thead>
<tbody>
<c:forEach var="project" items="${requestScope.projects}">
<tr>
<td>
<label class="checkbox" for="checkbox${project.id}">
<input type="checkbox" name="checkedProjects" value="${project.id}"
id="checkbox${project.id}" data-toggle="checkbox">
</label>
</td>
<td>${project.id}</td>
<td>${project.projectName}</td>
<td>${project.description}</td>
<td>${project.notes}</td>
<td><a href="${pageContext.request.contextPath}/manager/taskstable?project_id=${project.id}"
class="btn btn-info btn-xs"><fmt:message key="project.see.tasks"/></a>
</td>
How it looks at browser:
and moving is implemented as link button - See tasks
.
Here is snippet of TasksTableServlet:
@WebServlet("/manager/taskstable")
@MultipartConfig
public class TasksTableServlet extends HttpServlet {
private static Logger log = Logger.getLogger(AddTaskServlet.class);
private TaskService taskService;
private List<Task> tasks;
private static final String DATE_FORMAT = "MM/dd/yyyy";
public static final String ATTRIBUTE_TO_MODEL = "tasksList";
public static final String PAGE_OK = "/pages/manager/tasksTable.jsp";
public static final String PAGE_ERROR_URL = "error";
@Override
public void init() throws ServletException {
taskService = new TaskService();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
if (request.getParameter("project_id") != null) {
System.out.println("ID: " + request.getParameter("project_id"));
updateTable(request);
if (!tasks.isEmpty()) {
request.setAttribute(ATTRIBUTE_TO_MODEL, tasks);
request.getRequestDispatcher(PAGE_OK);
return;
}
}
} catch (Exception e) {
log.error(e);
}
response.sendRedirect(PAGE_ERROR_URL);
}
private void updateTable(HttpServletRequest request) {
try {
int id = Integer.parseInt(request.getParameter("project_id"));
tasks = taskService.getByProjectId(id);
} catch (DAOException e) {
log.error(e);
}
}
And here is content of tasksTable.jsp.
I couldn't figure out why this page isn't displayed? It should work, to my mind.
How to solve this trouble?
Solution
Requesting a dispatcher is just the first step. You also have to actually forward.
request.getRequestDispatcher(PAGE_OK).forward(request, response);
return;