Что я должен сделать, чтобы загрузить страницу JSP в теге ‹div› на другой странице JSP через сервлет?

Вот проблема, у меня есть 3 страницы JSP (main.jsp, manageClasses.jsp и insertDates.jsp) и 2 сервлета ( >AttendanceServlet и ManageClassServlet). Главная страница загружает остальные внутри себя.

В основном то, что я хочу сделать, это вызвать AttendanceServlet, я хочу загрузить insertDates.jsp в main.jsp. Замена предыдущего содержимого, которое было загружено ManageClassServlet.

main.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="js/jquery-1.7.min.js"></script>
        <link rel="stylesheet" href="css/stylesheetprincipal.css">
        <script type="text/javascript">  
            $(document).ready(function() {
            $("#gt").click(function(){
                $("#internal").load('ManageClassServlet');
            });
        });
        </script>
        <title>Main</title>
    </head>
    <body>
        <div id="nav">
            <ul>
                <li><a href="javascript:void(0)" id="gt" title="manage">MANAGE     CLASSES</a></li>  
                <li><a href="logout.jsp" title="exit">EXIT</a></li>
            </ul>
        </div>    
        <div id="forms">
            <div id="internal">
            </div>
        </div>
    </body>
</html>

Управление классовым сервлетом

@WebServlet(name = "ManageClassServlet", urlPatterns = {"/ManageClassServlet"})
public class ManageClassServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, java.io.IOException {
        HttpSession session = request.getSession();
        String[][] tableMatrix = getTableMatrix(professorClasses);
        session.setAttribute("tableMatrix", tableMatrix);
        response.sendRedirect("manageClasses.jsp");
    }
}

manageClasses.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Manage Classes</title>
    </head>
    <body>
        <form action="AttendanceServlet" method="post">
            <table id="classTable" border="2">
                <TR> <TH>&nbsp;</TH> <TH>Subject</TH>  <TH>Year/Semester</TH>  <TH>Frequencias</TH> </TR>
                <c:forEach items="${matrixTable}" var="row" varStatus="i">
                    <tr>
                        <TH>${row[0]}</TH>
                        <c:forEach begin="1" end="2" items="${row}" var="value">
                            <td>${value}</td>
                        </c:forEach>
                        <td> <button type="submit" name="Ver" value="${row[3]}">See    </button> </td>
                    </tr>
                </c:forEach>
            </table>
        </form>
    </body>
</html>

Я пытался использовать объект out для отправки страницы jsp, но это не сработало.

Сервлет посещаемости

@WebServlet(name = "AttendanceServlet", urlPatterns = {"/AttendanceServlet"})
public class AttendanceServlet extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, java.io.IOException {
        try {
            ClassDAO classDao = new ClassDAO();
            Integer idClass = Integer.parseInt(request.getParameter("See"));
            ClassBean class = classDao.searchClassBean(idClass);
            if (class.getDateClasses() == null) {
                String path = "/WEB-INF/jsp/main.jsp";
                PrintWriter out = response.getWriter();
                out.println("<script type=\"text/javascript\">");
                out.println("$(document).ready(function() {");
                out.println("$(\"#internal\").load('insertDates.jsp');");
                out.println("});");
                out.println("</script>");
                RequestDispatcher dispatcher = request.getRequestDispatcher(path);
                dispatcher.include(request, response);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}

person xeko    schedule 06.12.2011    source источник


Ответы (2)


Потребовалось некоторое время, прежде чем я смог понять странный способ загрузки, перенаправления и отправки (под)представлений в этом конкретном примере. Трудно определить основную причину вашей проблемы. По крайней мере, ясно, что вы сильно перебарщиваете с jQuery. Для начала, если у клиента отключен JS, то ваша главная страница уже совсем бесполезна.

Чтобы достичь того, чего вы хотите, вы должны сначала отделить обязанности на стороне клиента от обязанностей на стороне сервера. Выбросьте jQuery из головы на некоторое время и заставьте его работать с обычными элементами <form> и/или <a> и <jsp:include> в первую очередь. Если вы сохраните весь код Java в классе Servlet и сохраните весь HTML/CSS (и любой будущий JS) в файле JSP, тогда код будет писаться почти сам.

Наконец, как только вы на 100 % заработаете без какой-либо строки кода jQuery/JS, вы сможете последовательно улучшать работу на стороне клиента, добавляя jQuery ненавязчиво. . т.е. функциональность на стороне сервера (как у вас в сервлете и JSP) не должна изменяться (кроме окончательной проверки, является ли это обычным запросом или запросом ajax, чтобы можно было дать более подходящий ответ). JQuery нужно просто добавить обработчики событий во время загрузки документа и изменить поведение документа таким образом, чтобы улучшить взаимодействие с пользователем (опять же, без изменения кода на стороне сервера). jQuery не является фреймворком MVC сам по себе или что-то в этом роде. И нет, вы не должны позволять сервлету генерировать какой-либо код jQuery. Это не имеет никакого смысла.

Опять же, извините, если у меня нет готового ответа на этот вопрос, но, надеюсь, теперь вы понимаете, что я просто не могу этого сделать. Престижность за чистый стиль кода и хорошее начало работы с Servlet/JSP. Я бы только строчными буквами эти элементы <TH><TR>.

person BalusC    schedule 06.12.2011
comment
Я переписал весь код, следуя вашим инструкциям, и угадайте, что, как вы сказали, код почти написал сам себя. Теперь я могу поддерживать гораздо более быстрый темп, не слишком застревая. Как вы заметили, я не опытный разработчик и впервые имею дело с js. Для меня большая честь получить ответ от такого потрясающего программиста. И если это не готовый ответ, то это потому, что это невозможно. Большое спасибо! - person xeko; 07.12.2011

Обычно вы делаете это через отправку формы Ajax — так же, как вы загружаете форму, но через отправку. (Обычно $.post.)

Сервлет AttendanceServlet будет перенаправлять на insertDates.jsp как обычно, обработчик success отправки Ajax обновит div #internal результатами отправки Ajax.

Мне непонятно, почему вы отошли от обычных механизмов jQuery, когда дело дошло до отправки формы. Возможно, я что-то упускаю, но я не могу точно сказать, что вы пытались сделать.

person Dave Newton    schedule 06.12.2011