代码之家  ›  专栏  ›  技术社区  ›  catch32

RegestDispatcher重定向后,页面上下文是否未显示(白色页面)?

  •  0
  • catch32  · 技术社区  · 11 年前

    我从项目页面移动以查看当前项目的任务。

    我需要重定向到所选项目的任务页面。它被重定向到ok url,但页面不显示。显示白色页面:

    tasks table

    URL正确,参数传递正确。

    这是一张 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>
    

    浏览器外观:

    projects table

    并且移动被实现为链接按钮- See tasks .

    以下是的片段 任务TableServlet :

    @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);
        }
    }
    

    这里是 content of tasksTable.jsp .

    我不明白为什么不显示此页面?在我看来,它应该起作用。

    如何解决这个问题?

    1 回复  |  直到 11 年前
        1
  •  1
  •   developerwjk    11 年前

    请求调度员只是第一步。你还必须实际转发。

    request.getRequestDispatcher(PAGE_OK).forward(request, response);
    return;