使用JSP加载时间表而无需延迟加载时间表的更好方法



我有一个显示每周时间表的应用程序。所有约会都存储为数据库条目。我使用类(ScheduleCells)来管理这些条目,然后将它们存储在bean(ScheduleCellbean)中,然后返回二维数组列表。在我的index.jsp中,我有以下代码来检索此ArrayList并填写时间表。在index.jsp中,我将请求发送给Servlet。

index.jsp:

<script type="text/javascript">
    fillSchedule = function (w) {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "schedule?w=" + w);
        xhr.send();
        <%
            int i;
            int j;
            int w = 0;
            if (session.getAttribute("w") != null) {
               w = (Integer) session.getAttribute("w");
            }
            ScheduleCells sc = new ScheduleCells();
             for (i = 0; i < 9; i++) {
                 for (j = 0; j < 5; j++) {
                     ScheduleCellBean cell = sc.getCellByHDW(i + 1, j + 1, w);
                         if (cell.getExists()) {
        %>
        createNewAppointment(<%= j%>, <%= i%>,
            "<%= cell.getSubject_scheduled_subjectabbr()%>",
            "<%= cell.getUser_scheduled_userabbr()%>",
            "<%= cell.getScheduled_groupname()%>");
        <% }}}%>
    };
    fillSchedule(7);
</script>

Schedulecellbean:

public class ScheduleCellBean extends ScheduleCells {
    private boolean exists = false; 
    private String scheduled_id;
    private String scheduled_date;
    private String scheduled_hour;
    private String user_scheduled_firstname;
    private String user_scheduled_lastname;
    private String user_scheduled_username;
    private String user_scheduled_password;
    private String user_scheduled_userabbr;
    private String user_scheduled_subjectname;
    private String user_scheduled_subjectabbr;
    private String scheduled_groupname;
    private String subject_scheduled_subjectname;
    private String subject_scheduled_subjectabbr;
    private String scheduled_datetimerequest;
    private String user_request_firstname;
    private String user_request_lastname;
    private String user_request_username;
    private String user_request_password;
    private String user_request_userabbr;
    private String user_request_subjectname;
    private String user_request_subjectabbr;
    //Getters And Setters.
}

Schedulecellservlet.jsp:

@WebServlet(name = "ScheduleCell", urlPatterns = {"/schedule"})
public class ScheduleCellServlet extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, SQLException {
        HttpSession session = request.getSession();
        session.setAttribute("w", Integer.parseInt(request.getParameter("w")));
     }
    //Default HTTP Servlet functions.
}

一切正常,但是由于我正在使用servlet,因此有一个延迟,这导致时间表似乎无法加载,但是在刷新会话时,会话attribute会通过,并加载了正确的时间表。因此,我进行的任何更改(例如fillSchedule(8))仅在我重新加载页面时进行。但是我喜欢时间表可以进行互动,这意味着用户可以选择一周的时间,并且该周的正确时间表会立即弹出。我看到的时间表缺少我选择的内容,当我重新编写页面时,我选择的时间表是可见的,但是与此同时,第7周的时间表再次加载,但是只有在我朗读页面时才可以看到。

我的问题是:如何以一种我不需要(手动)刷新页面的方式来实现这一目标?

感谢提前的任何帮助!

自动刷新您的JSP页面以进行新响应。

代码段:

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
   // Set refresh, autoload time as 5 seconds
   response.setIntHeader("Refresh", 5);
   // Get current time
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("Crrent Time: " + CT + "n");
%>
</center>
</body>
</html>

最新更新