JSP和Javascript值以及方法调用

时间:2014-07-23 12:27:16

标签: javascript html-table jsp-tags

我正在开发第一个JSP应用程序。我在MS Access中有两个使用DSN与JSP连接的数据库表。我要做的很简单。我有一个输入文本框,其中包含" ID"作为输入和用于查看记录的按钮。在按钮单击时,将从具有与文本框中的输入相同的ID的记录的两个表中检索结果集。

On按钮单击,应动态创建一个表,显示在结果集中检索的值.OnClick调用Javascript方法ShowData并将结果集的值传递给动态表。

所以形成元素'在onClick之后将处理值,并且我的结果集在onClick之前有记录,正如您在代码中看到的那样,因此,我无法显示正确的结果,因为text-input在查询中变为null并且实现了不准确的结果集。

请指导我如何正确发送文本输入值以便在ButtonClick事件上查询。

希望我很清楚。

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <%@page import="java.sql.*"%>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
            <script  language="javascript">

// creating dynamic tables
                function showData(std_id,std_name,std_prog,std_email,std_semester,std_course,std_status,std_title,std_score,std_credit_hour){

        var width = 25;
        var theader = "<table border='5' id='table1' width = ' "+ width +"% '>";
        var tbody = "";

        var t2header = "<table border='5' id='table2' width = ' "+ width +"% '>";
        var t2body ="";

        tbody += "<tr>";
        tbody += "<td>";
                tbody += "Student ID";
                tbody += "</td>";
                tbody += "<td>";
                tbody += std_id;
         tbody += "</tr>";

         tbody += "<tr>";
        tbody += "<td>";
                tbody += "Student Name";
                tbody += "</td>";
                tbody += "<td>";
                tbody += std_name;
         tbody += "</tr>";

         tbody += "<tr>";
        tbody += "<td>";
                tbody += "Study Program";
                tbody += "</td>";
                tbody += "<td>";
                tbody += std_prog;
         tbody += "</tr>";

         tbody += "<tr>";
        tbody += "<td>";
                tbody += "Email";
                tbody += "</td>";
                tbody += "<td>";
                tbody += std_email;
         tbody += "</tr>";


        t2body += "<tr>";
                t2body += "<td>";
                t2body += "Semester";
                t2body += "</td>";
                t2body += "<td>";
                t2body += "Course";
                t2body += "</td>";
                t2body += "<td>";
                t2body += "Title";
                t2body += "</td>";
                t2body += "<td>";
                t2body += "Status";
                t2body += "</td>";
                t2body += "<td>";
                t2body += "Score";
                t2body += "</td>";
                t2body += "<td>";
                t2body += "Credit Hour";
                t2body += "</td>";
          t2body += "</tr>";


          t2body += "<tr>";
                t2body += "<td>";
                t2body += std_semester;
                t2body += "</td>";
                t2body += "<td>";
                t2body += std_course;
                t2body += "</td>";
                t2body += "<td>";
                t2body +=  std_title;
                t2body += "</td>";
                t2body += "<td>";
                t2body += std_status;
                t2body += "</td>";
                t2body += "<td>";
                t2body += std_score;
                t2body += "</td>";
                t2body += "<td>";
                t2body += std_credit_hour;
                t2body += "</td>";
           t2body += "</tr>";



        var tfooter = "</table>";
        document.getElementById('wrapper').innerHTML = theader + tbody + tfooter; 
        document.getElementById('new_wrapper').innerHTML = theader + t2body + tfooter;
                }
            </script>
        </head>

        <body>

            <div id="container" style="height:600px;width:700px;border:#6666ff; border-style: solid;background-color: aliceblue" >


     <div id='content' style='height:330px;width: 550px;text-align: left;background-color: #F3F3F3;float: left;border:#6666ff'>
      <h3>Enter Student ID to View Grade Book Information</h3>
              <form  id="myform" action="viewGradeBook.jsp" method="POST" >
            Enter Student ID &nbsp;<input type="text" name="View_Std_Id" value="" /> // it need to be sent to query
            <br/>

             <%     
                String id_input = request.getParameter("View_Std_Id");
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String conUrl = "jdbc:odbc:GradeBookDSN";
    Connection con = DriverManager.getConnection(conUrl);
    String sql = " SELECT * FROM StudentProfile , GradeBook WHERE StudentProfile.StudentID AND GradeBook.StudentID = '"+id_input+"' ";

    PreparedStatement pStmt = con.prepareStatement(sql);
    ResultSet rs = pStmt.executeQuery();
                String id= "";
                String name="";
                 String prog="";
                 String email ="";
                 String semester = "";
                String course = "";
                 String status = "";
                 String title = "";
                 String score = "";
                 String credit_hour = "";
    while(rs.next()){
    // The row name is ―name‖ in database ―PersonInfo,// hence specified in the getString() method.
    id = rs.getString("StudentID");
     name = rs.getString("StudentName");
    prog = rs.getString("StudyProgram");
    email = rs.getString("Email");
     semester = rs.getString("Semester");
     course = rs.getString("Course");
      status = rs.getString("Status");
      title = rs.getString("Title");
      score = rs.getString("Score");
     credit_hour = rs.getString("CreditHour");

    }

           %>

            <input type="button" value="View Record" onclick="showData(.......)"/>

            <div id="wrapper"></div>
            <br/>
            <div id="new_wrapper"></div>
            </form>





 </div>

<div id='footer' style="background-color: #C2D5FC;clear: both;text-align: center;border:#6666ff">Copyrights@vu2014</div>  
</div>  
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

您无法在单个JSP加载中实现此目的。

JSP是一个在单个Web请求上评估和呈现的视图(一个请求对应于您的网页加载)

如果您点击一个按钮,那么您已经在客户端,并且您无法访问服务器端的数据库。

您必须生成第二个请求(例如,而不是您放置提交的按钮,并将其放在表单中)并将参数传递给此请求以允许服务器执行SQL查询。

使用这种方法,你不需要在javascript中注入一些html。

您应该阅读有关N层架构,servlet和MVC模型的更多信息。

好的做法是:

  • 执行处理(您的SQL查询)并生成一个或多个bean的servlet(控制器)。
  • 包含要显示的数据的java bean(模型)
  • 仅显示包含在视图中的动态值的html的JSP(视图)

此结构将帮助您

  • 了解网络应用程序中真正发生的事情。
  • 处理异常(您的数据库访问编码不好,您必须管理异常并关闭finally块中的连接)
  • 在没有图形问题的情况下测试您的治疗方法。

您可以尝试此链接作为开始 http://rathinasaba.wordpress.com/2011/10/13/simple-webapplication-using-servlet-and-jsp/