繁体   English   中英

我应该怎么做才能加载一个JSP页面 <div> 通过Servlet在另一个JSP页面中标记?

[英]What I should do to load a JSP page in a <div> tag in another JSP page through a Servlet?

这是问题所在,我有3个JSP页面( main.jspmanageClasses.jspinsertDates.jsp )和2个Servlet( AttendanceServletManageClassServlet )。 主页将其他页面加载到其内部。

基本上,我想做的是在调用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>

ManageClassServlet

@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页面,但是它没有用。

AttendanceServlet

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

在这个特定示例中,我花了好一会儿才得以解决这种奇怪的加载,重定向和分派(子)视图的方式。 很难找出问题的根本原因。 至少,很明显,您对jQuery的了解过高。 首先,如果客户端禁用了JS,则您的主页已经完全无用。

要实现所需的任何功能,首先必须将客户端职责与服务器职责分开。 将jQuery搁置一会儿,并使其与普通的<form>和/或<a>元素以及<jsp:include> 如果将所有 Java代码都保留在Servlet类中,并将所有 HTML / CSS(以及将来的任何JS)保留在JSP文件中,则该代码几乎会自行编写。

最后,一旦所有这一切都可以在没有任何jQuery / JS代码的情况下100%正常工作,那么您可以通过以不引人注目的方式添加jQuery来逐步增强客户端体验。 也就是说,不得更改服务器端功能(就像在Servlet和JSP中一样)(除了最终检查它是正常请求还是ajax请求之外,以便可以给出更合适的响应)。 jQuery只需在文档加载期间添加事件处理程序,并以改善用户体验的方式更改文档行为(同样,无需更改服务器端代码)。 jQuery本身并不是一个MVC框架。 不,您不应该让Servlet发出任何jQuery代码。 这是没有道理的。

再一次,对不起,如果我没有合适的答案,但是您希望您现在明白我根本无法做到。 尽管使用干净的代码风格和Servlet / JSP是一个很好的起点,但还是值得赞扬。 我只将那些<TH><TR>元素小写。

通常,您可以通过Ajax表单提交来执行此操作,加载表单的方式与之相同,只是通过提交。 (通常是$.post 。)

AttendanceServlet servlet将insertDates.jsp转发到insertDates.jsp ,Ajax提交的success处理程序将使用Ajax提交的结果更新#internal div。

对我来说尚不清楚,一旦提交表单,为什么您就放弃了普通的jQuery机制。 也许我缺少了一些东西,但是我无法真正告诉您您想做什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM