การอ่านที่เกี่ยวข้อง:
การจัดระเบียบบันทึกการศึกษา JQGrid ใน Java - บทขั้นสูง (I)
บทความนี้เริ่มมีปฏิสัมพันธ์กับพื้นหลัง (ภาษาชวา) อย่างเป็นทางการและแพลตฟอร์มที่ใช้คือ
JDK: Java 1.8.0_71
Myeclisp 2015 เสถียร 2.0
Apache Tomcat-8.0.30
mysql 5.7
Navicat สำหรับ MySQL 11.2.5 (เครื่องมือการจัดการฐานข้อมูล MySQL)
1. ส่วนฐานข้อมูล
1. สร้างฐานข้อมูล
สร้างฐานข้อมูลโดยใช้ navicat สำหรับ MySQL (ไม่ได้แนะนำโดยใช้เครื่องมืออื่นหรือใช้บรรทัดคำสั่งโดยตรง)
2.
2. สร้างตาราง
ดับเบิลคลิกเพื่อเปิดขั้นตอนก่อนหน้าเพื่อสร้างฐานข้อมูล - คลิกขวาที่ตารางใหม่ - เลือกตารางใหม่
เมื่อคุณสร้างฟิลด์ต่อไปนี้คุณจะแจ้งให้ป้อนชื่อตาราง
2. ส่วนขั้นตอน
1. สร้างโครงการใหม่
สร้างใหม่โดยใช้ MyEclipse - Web Project
ป้อนชื่อโครงการเพื่อเลือก Java และ Tomcat ที่ใช้งานโครงการ คลิกถัดไปจนถึงหน้าต่อไปนี้คลิกที่ช่องทำเครื่องหมายด้านล่างเพื่อสร้างไฟล์ web.xml โดยอัตโนมัติ
สร้างโครงสร้างแพ็คเกจต่อไปนี้และสร้างคลาส VO ใหม่ (คุณสมบัติสอดคล้องกับฟิลด์ฐานข้อมูลทีละคน)
demo.java
แพ็คเกจ com.xeonmic.vo; การสาธิตคลาสสาธารณะ {ID ส่วนตัว ID; ชื่อสตริงส่วนตัว; ประเภท int ส่วนตัว; Private Double Pay; ข้อความสตริงส่วนตัว; การสาธิตสาธารณะ () {// TODO ที่สร้างขึ้นอัตโนมัติ constructor stub} การสาธิตสาธารณะ text;} public int getId () {return id;} public void setId (int id) {this.id = id;} สตริงสาธารณะ getName () {return name;} public Void setName (ชื่อสตริง) {this.name = name;} public int getType () {return pay;} โมฆะสาธารณะ setPay (จ่ายสองครั้ง) {this.pay = pay;} สตริงสาธารณะ getText () {return text;} โมฆะสาธารณะ settext (ข้อความสตริง) {this.text = text;}@overridepublic toString () {return "demo [id =" + id " -2. นำเข้าแพ็คเกจ JAR ของการเชื่อมต่อฐานข้อมูลและไฟล์ JSON
แพ็คเกจการเชื่อมต่อฐานข้อมูลสามารถพบได้ในไดเรกทอรีต่อไปนี้ของไดเรกทอรีการติดตั้ง MySQL
นอกจากนี้แพ็คเกจ JAR ที่จำเป็นสำหรับ JSON ได้ถูกอัปโหลดไปยัง Baidu Cloud (http://pan.baidu.com/s/1detgjrv) และคัดลอกและวางลงในไดเรกทอรี WebRoot/Web-inf/LIB
จากนั้นเลือกคลิกขวาทั้งหมดเพื่อเพิ่มไปยังเส้นทางการสร้าง
3. การใช้งานชั้นพื้นฐานของรูปแบบการออกแบบ DAO
อ้างถึง "Java Web Development พื้นฐานคลาสสิก" ที่นี่เราจะไม่อธิบายซอร์สโค้ดแล้วเขียนบทความแยกต่างหากเพื่อพูดคุยเกี่ยวกับส่วนนี้ของความรู้พื้นฐาน
--3.1. databaseconnection.java
แพ็คเกจ com.xeonmic.dbc; นำเข้า java.sql.connection; นำเข้า java.sql.driverManager; นำเข้า java.sql.sqlexception; คลาสสาธารณะ Databaseconnection dburl = "jdbc: mysql: // localhost: 3306/jqgriddemo"; สตริงสุดท้ายคงที่ส่วนตัว dbuser = "root"; สตริงสุดท้ายคงที่ dbpassword = "1234"; การเชื่อมต่อส่วนตัว conn = null; dbuser, dbpassword);} catch (classnotfoundexception e) {// toDo สร้างบล็อก catch catch โดยอัตโนมัติ e.printstacktrace ();} catch (sqlexception e) {// toDo สร้างการเชื่อมต่อ catch catch catch -public () this.conn;} public void close () {ถ้า (this.conn! = null) {ลอง {this.conn.close ();} catch (sqlexception e) {// todo สร้างบล็อก catch block โดยอัตโนมัติ E.printstacktrace ();}}}}}}--3.2. demodao.java
แพ็คเกจ com.xeonmic.dao; นำเข้า java.util.list; นำเข้า com.xeonmic.vo.demo; อินเตอร์เฟสสาธารณะ demodao {// เพิ่มวิธีการสาธารณะบูลีนโดรเมอร์ Dochange (สาธิตสาธิต);}--3.3. demodaoimpl.java
แพ็คเกจ com.xeonmic.dao.impl; นำเข้า java.sql.connection; นำเข้า java.sql.preparedStatement; นำเข้า java.sql.resultset นำเข้า java.sql.sqlexception; นำเข้า Java.util.arraylist; com.xeonmic.vo.demo; Demodaoimpl คลาสสาธารณะใช้ demodao {การเชื่อมต่อส่วนตัว conn = null; privateStatement ส่วนตัว pstmt = null; demodaoimpl สาธารณะ (การเชื่อมต่อ conn) {this.conn = conn; t_demo (พิมพ์, จ่าย, ชื่อ, ข้อความ) ค่า (?,?,?,?) "; ลอง {this.pstmt = this.conn.preparestatement (sql); this.pstmt.setintint (1, demo.getType ()); demo.getName ()); this.pstmt.setstring (4, demo.getText ()); ถ้า (this.pstmt.executeUpdate ()> 0) {flag = true;} this.pstmt.close ();} catch (sqlexception e) Flag;}@overridepublic List <EMO> DOSEARCH (คีย์สตริง) {// วิธีการที่สร้างอัตโนมัติแบบอัตโนมัติ stubif (ปุ่ม == null) {keys = "";} สตริง sql = "เลือก id, ชื่อ, จ่าย, จ่าย, ข้อความจาก t_demo"+keys; {this.pstmt = this.conn.preparestatement (SQL); ResultSet rs = this.pstmt.executeQuery (); Demo Demo = null; การสาธิต (Rs.GetInt ("ID"), Rs.getInt ("Type"), Rs.getDouble ("Pay"), Rs.getString ("Name"), Rs.getString ("Text")); all.add (สาธิต);} this.pstmt.close (); } catch (sqlexception e) {// todo สร้างบล็อก catch catch โดยอัตโนมัติ E.printStackTrace ();} return ทั้งหมด;}@overridepublic Boolean Dodelete (ID int) {boolean flag = false; string sql = "ลบออกจาก t_demo ที่ id =?"; this.conn.preparestatement (sql); this.pstmt.setint (1, id); ถ้า (this.pstmt.executeupdate ()> 0) {flag = true;} this.pstmt.close ();} catch (sqlexception e) บูลีน dochange (สาธิตการสาธิต) {boolean flag = false; string sql = "อัปเดต t_demo set type =?, pay =?, name =?, text =? ที่ไหน id =?"; ลอง {this.pstmt = this.conn.preparestatement (sql); demo.getType ()); this.pstmt.setDouble (2, demo.getPay ()); this.pstmt.setstring (3, demo.getName ()); this.pstmt.setstring (4, demo.getText (); true;} this.pstmt.close ();} catch (sqlexception e) {// todo สร้างบล็อก catch block โดยอัตโนมัติ E.printstackTrace ();} return flag;}}- 3.5. Factory.java
แพ็คเกจ com.xeonmic.factory; นำเข้า com.xeonmic.dao.demodao; นำเข้า com.xeonmic.dao.proxy.demodaoproxy; โรงงานชั้นเรียนสาธารณะ
--3.6. demotest.java (ดำเนินการทดสอบอย่างง่ายของวิธีก่อนหน้า)
แพ็คเกจ com.xeonmic.test; นำเข้า java.util.linkedlist; นำเข้า java.util.list; นำเข้า com.xeonmic.factory.factory; นำเข้า com.xeonmic.vo.demo; ชั้นเรียนสาธารณะ demo (); demo1.setName ("ชื่อ"); demo1.setpay (0.98); demo1.settype (1); demo1.settext ("text"); docreate (demo1); dosearch (null); if (doSearch (null)! = null &&! dosearch (""). รับ (0); demo1.settext ("เปลี่ยนข้อความ"); dochange (demo1); dosearch ("โดยที่ id ="+demo1.getid ()); dodelete (demo1.getid (); dosearch (null);}} รายการสาธารณะ LinkedList <EMO> (); Alldemos = Factory.getDemodaoInstance (). DOSEARCH (ปุ่ม); สำหรับ (สาธิตการสาธิต: Alldemos) {System.out.println (demo.toString ());} return alldemos;} โมฆะสาธารณะคงที่ docreate (สาธิตสาธิต) {ถ้า (factory.getDemodaoinstance (); {system.out.println ("เพิ่มล้มเหลว");}} โมฆะคงที่สาธารณะ dochange (สาธิตการสาธิต) {ถ้า (factory.getDemodaoInstance (). dochange (demo)) {system.out.println ("การปรับเปลี่ยนที่ประสบความสำเร็จ"); Dodelete (int id) {if (factory.getDemodaoinstance (). Dodelete (id)) {system.out.println ("ลบสำเร็จ")} else {system.out.println ("ลบล้มเหลว"); NAME = NAME, TYPE = 1, Pay = 0.98, text = text] SELECT ID, ชื่อ, ประเภท, จ่าย, ข้อความจาก T_DEMO DEMO [ID = 1, ชื่อ = ชื่อ, ประเภท = 1, จ่าย = 0.98, ข้อความ = text] เลือก ID, ชื่อ, Pay, Pay, Text จาก T_Demo Demo [id = 1, ชื่อ, ชื่อ, ประเภท = 1, pay = 0.98 [id = 1, name = name, type = 1, pay = 0.98, text = text] seterect modification id, ชื่อ, ประเภท, จ่าย, ข้อความจาก t_demo โดยที่ id = 1demo [id = 1, ชื่อ = ชื่อ, type = 1, pay = 0.98, text = เปลี่ยนข้อความ] ลบรหัสที่ประสบความสำเร็จ4. หน้า JSP และส่วน servlet (สำคัญ)
- 4.1 index.jsp (แทนที่เนื้อหาของแท็ก HTML ใน index.html เป็นแท็ก HTML และแก้ไขเนื้อหาของ HTML ใน index.jsp และทำการแก้ไขต่อไปนี้เป็น JS)
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+"getServerName ()+": " "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <title> การสาธิต </title> <link rel = "stylesheet" type = "text/css" href = "css/jquery-ui.min.css" href = "css/jQuery-ui.theme.min.css"/> <link rel = "stylesheet" type = "text/css" href = "css/ui.jqgrid-bootstrap-ui.css"/> <link rel = "stylesheet /> </head> <body> <div id = "main"> <!-ที่ที่ jqgrid อยู่-> <table id = "grid-table"> </table> <!-แถบการนำทางเรียกดู jqgrid-> <div id = "grid-pager"> </div> </div> charset = "utf-8"> </script> <script src = "js/i18n/grid.locale-cn.js" type = "text/javascript" charset = "utf-8"> </script> type = "text/javascript"> // เมื่อข้อมูลเป็น "local" คุณต้องกรอกข้อมูลใน var grid_selector = "#grid-table"; var pager_selector = "#grid-pager"; $ (เอกสาร). พร้อม (ฟังก์ชั่น () {$ ("#grid-table"). การดึงข้อมูล: "<%= basepath%>"+"demoservlet", // servlet urllediturl ที่ใช้สำหรับการเพิ่มการแก้ไขและการลบ: "<%= basepath%>"+"demochangeservlet", // data: grid_data, // JSONP, XML, ฯลฯ ) ความสูง: 150, // ความสูง, ความสูงของตาราง อาจเป็นค่าเปอร์เซ็นต์หรือ 'auto'mtype: "get", // วิธีการส่ง colnames: [' หมายเลขคำสั่งซื้อออก ',' ประเภทออก ',' จำนวนเงินทั้งหมด ',' ผู้สมัคร (หน่วย) ',' note '], colmodel: [{ชื่อ:' id ', ดัชนี:' id ', // ดัชนี พารามิเตอร์ของการโต้ตอบกับพื้นหลังคือ sidxkey: จริง // เมื่อไม่มี ID ในข้อมูลที่ส่งคืนจากฝั่งเซิร์ฟเวอร์ให้ใช้สิ่งนี้เป็น rowid เพียงตัวเดียวและใช้เพียงหนึ่งคอลัมน์เพื่อทำการตั้งค่านี้ หากมีการตั้งค่ามากกว่าหนึ่งรายการจะมีเพียงคนแรกเท่านั้นที่ถูกเลือกและคนอื่น ๆ จะถูกละเว้นความกว้าง: 100, แก้ไขได้: False, Editoptions: {ขนาด: "20", ความยาวสูงสุด: "30"}}, {ชื่อ: ประเภท ', ดัชนี: ค่าตัวเลือก: ข้อความ, textarea, เลือก, ช่องทำเครื่องหมาย, รหัสผ่าน, ปุ่ม, รูปภาพ, รูปภาพและไฟล์. seditoptions: {value: "1: การซื้อและป้อน; 2: กลับไปที่ป้อน"}}, {ชื่อ: 'จ่าย', ดัชนี: 'จ่าย', ความกว้าง: 60, corttype: "double" {ขนาด: "20", maxlength: "30"}}, {ชื่อ: 'ข้อความ', ดัชนี: 'ข้อความ', ความกว้าง: 250, เรียงลำดับได้: เท็จ, แก้ไขได้: จริง, แก้ไข: "textarea", editoptions หรือไม่ Rownum: 10, // แสดงจำนวนระเบียนต่อหน้า Rowlist: [10, 20, 30], // อาร์เรย์ขององค์ประกอบที่ใช้ในการเปลี่ยนจำนวนแถวเพื่อแสดงกล่องรายการแบบเลื่อนลง เพจเจอร์: pager_selector, // แถบการนำทางท่องเว็บที่หน้าและปุ่มอยู่นั้นเป็นสิ่งที่ Altrows: จริง, // ตั้งเป็นตารางแถวสลับ, ค่าเริ่มต้นเป็นเท็จ // toppager: จริง // ไม่ว่าแถบการนำทางการเรียกดูจะแสดงขึ้นมาหลายทางเลือกหรือไม่ แถบการนำทางมีหลายเลือก: จริง // ไม่ว่าแถบการนำทางท่องเว็บจะถูกเลือกหลายครั้งโดย Ctrl Keys Multiboxonly: TRUE, // ไม่ว่าช่องทำเครื่องหมายจะถูกเลือกหลายรายการโดย subgrid: true, // sortname: 'id', // วิธีการเรียงลำดับเริ่มต้น // auto-width}); // แถบการนำทางเรียกดูเพื่อเพิ่มรหัสส่วนฟังก์ชัน $ (grid_selector) .navgrid (pager_selector, {ค้นหา: จริง, // ดึงข้อมูลเพิ่ม: จริง, // เพิ่ม (สำนักงานสามารถแสดงได้เฉพาะเมื่อแก้ไขได้) {}, // ตัวเลือกแก้ไข {}, // เพิ่มตัวเลือก {}, // ลบตัวเลือก {multipleSearch: true} // ตัวเลือกการค้นหา - กำหนดการค้นหาหลายครั้ง);}); </script> </body> </html>- 4.2 demoservlet.java
แพ็คเกจ com.xeonmic.action; นำเข้า java.io.ioexception; นำเข้า java.util.linkedList; นำเข้า java.util.list; นำเข้า javax.servlet.servletexception; นำเข้า javax.servlet.http.httpservlet; javax.servlet.http.httpservletResponse; นำเข้า net.sf.json.jsonarray; นำเข้า net.sf.json.jsonobject; นำเข้า com.xeonmic.factory.factory; นำเข้า com.xeonmic.vo.demo;/*** serialVersionUID = 1l;/*** @SEE httpservlet#doGet (คำขอ httpservletrequest, การตอบสนอง httpservletResponse)*/void doget ที่ได้รับการป้องกัน // หากไม่ได้ตั้งค่าการเข้ารหัสที่นี่จะมีการตอบกลับที่อ่านไม่ออก SetContentType ("ข้อความ/html; charset = utf-8"); Response.Setheader ("แคชควบคุม", "ไม่มีแคช"); int rows = integer.valueof (request.getParameter ("rows")); // จำนวนระเบียนที่แสดงในแต่ละหน้า int หน้า = integer.valueof (request.getParameter ("หน้า")); // สตริงหมายเลขหน้าปัจจุบัน sord = request.getParameter ("sord"); // วิธีการเรียงลำดับสตริง sidx = request.getParameter ("sidx"); // การเรียงลำดับชื่อคอลัมน์การค้นหาบูลีน = (request.getParameter ("_ search") ตั้งค่าคีย์สตริง = ""; // สตริงเงื่อนไขแบบสอบถามถ้า (ค้นหา) {keys = "โดยที่"; ตัวกรองสตริง = request.getParameter ("ตัวกรอง"); // เงื่อนไขเฉพาะ System.out.println (ตัวกรอง); // รูปแบบของข้อมูลขาเข้าคล้ายกับนี้: "{" groupop ":" และ "," กฎ ": [{" ฟิลด์ ":" id "," op ":" eq "," data ":" 1 "}, {" ฟิลด์ ":" type "," op ":" ew "," data ":" 2 "} (และ/หรือ) ถ้า (jsonobject.getString ("groupop")! = null &&! "". เท่ากับ (jsonobject.getString ("groupop"))) {ถ้า (jsonobject.getString ("groupop") jsonobject.getjsonarray ("กฎ"); // ความเงียบสงบแต่ละเงื่อนไขสำหรับ (int z = 0; z <ulrussjson.size (); Z ++) {Object T = RULUSJSON.GET (Z); JSONObject Rulejson = JsonObject.FromObject (t); String Field = Rulejson.getString ("Field"); String op = Rulejson.getString ("OP"); String data = Rulejson.getString ("data"); string = "; // string = "= '"+data+"'" break; case "ne": // unequal string = "<> '"+data+"'" break; case "li": // น้อยกว่า string = "<'"+data+"' break; case" le ": // น้อยกว่าหรือเท่ากับสตริง =" <= '" "; break; case" ge ": // มากกว่าหรือเท่ากับ string ="> = '"+data+"' "break; case" bw ": // ระหว่าง ... {ถ้า (data.split (", "). length == 2) {string =" ระหว่าง '+data.split (",") [0] '"+data+"' "; // จัดการเมื่อข้อผิดพลาดข้อมูล}} break; case" bn ": // ไม่ระหว่าง ... {ถ้า (data.split (", "). length == 2) {string =" ไม่ระหว่าง '"data.split (", ") "; // จัดการเมื่อข้อผิดพลาดข้อมูล}} break; case" ew ": // จบด้วย ... string =" like '%"+data+"' "break; case" en ": // ไม่จบด้วย ... string =" ไม่ชอบ '+data+"'"; case "cn": // '%"+data+"%' "; break; case" ใน ": // ใน {string =" in ("; string [] data = data.split (", "); สำหรับ (int i = 0; I <dataS.length; i ++) {string+= "'"+datas [i]+"'"; ถ้า (i! = dataS.length-1) {string+= ",";} else {string+= ")";}}} break; case "ni": // ไม่ได้อยู่ i ++) {string+= "'"+datas [i]+"'" ถ้า (i! = dataS.length-1) {string+= ",";} อื่น (z == ulrussjson.size ()-1) {keys+= ""+ฟิลด์+""+สตริง+"";} else {keys+= "" ฟิลด์+""+สตริง+""+groupop+"";}}}} {system.out.println (sidx); keys += "สั่งซื้อโดย" +sidx; system.out.println ("sord =" +sord); ถ้า (! sord.equals ("asc") {keys += "desc"; total = (alllist.size ()%rows == 0)? (alllist.size ()/แถว): ((alllist.size ()/แถว): ((alllist.size ()/แถว) +1); int j = 0; int m = (หน้า 1)* j <alllist.size () && j <n; รวม); jjson.ccumulate ("บันทึก", alllist.size ()); jjson.ccumulate ("แถว", jarray); system.out.println (jjson.toString ()); Response.getWriter () เขียน (jjson.tostring () การตอบสนอง httpservleSsesponse)*/การป้องกันโมฆะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {// todo วิธีการที่สร้างอัตโนมัติ stubthis.doget (คำขอ, การตอบสนอง);}}}}- 4.3 demochangeservlet.java
แพ็คเกจ com.xeonmic.action; นำเข้า java.io.ioexception; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletRequest; com.xeonmic.factory.factory; นำเข้า com.xeonmic.vo.demo; demochangeservlet ระดับสาธารณะขยาย httpservlet {/****/ส่วนตัวคงที่ Long Serialversionuid = 1l;/*** วิธีการของ Servlet <br> ** วิธีนี้เรียกว่าเมื่อแบบฟอร์มมีวิธีแท็กค่าเท่ากับที่จะได้รับ** @param คำขอคำขอส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์* @param การตอบสนองการตอบกลับส่งโดยเซิร์ฟเวอร์ไปยังไคลเอนต์* @throws servletexception หากเกิดข้อผิดพลาด* @throws ioexception หากเกิดข้อผิดพลาด ioException {boolean flag = false; string opera = request.getParameter ("oper"); switch (oper) {case "del": {string [] ids = request.getParameter ("id"). แยก (","); สำหรับ (int i = 0; = integer.valueof (ids [i]); flag = factory.getDemodaoinstance (). Dodelete (id);}} break; case "เพิ่ม": {int type = integer.valueof request.getParameter ("ชื่อ"); String text = request.getParameter ("text"); ตัวอย่างสาธิต = การสาธิตใหม่ (-1, ประเภท, จ่าย, ชื่อ, ข้อความ, ข้อความ); flag = factory.getDemodaoInstance (). docreate (demo); } break; case "แก้ไข": {int id = integer.valueof (request.getParameter ("id")); int type = integer.valueof (request.get.parameter ("type")); double pay = double.valueof การสาธิต = การสาธิตใหม่ (ID, ประเภท, จ่าย, ชื่อ, ข้อความ); Flag = Factory.getDemodaoinstance (). Dochange (ตัวอย่าง); } break; ค่าเริ่มต้น: break;} system.out.println (Flag);}/*** วิธี dopost ของ servlet <br> ** วิธีนี้เรียกว่าเมื่อแบบฟอร์มมีวิธีแท็กค่าเท่ากับโพสต์** @param คำขอคำขอส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์* @param การตอบสนองการตอบกลับส่งโดยเซิร์ฟเวอร์ไปยังไคลเอนต์* @throws servletexception หากเกิดข้อผิดพลาด* @throws ioexception หากเกิดข้อผิดพลาด ioException {this.doget (คำขอ, การตอบกลับ);}}―4.4.web.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/nsds id = "webapp_id" เวอร์ชัน = "3.1"> <แสดง-ชื่อ> jqgrid </display-name> <servlet> <servlet-name> demoservlet </servlet-name> ปล่อยให้ </servlet-name> <servlet-class> com.xeonmic.action.demochangeservlet </servlet-class> </servlet> <servlet-mapping> g> <servlet-mapping> <servlet-name> demochangeservlet </servlet-name> <url-pattern>/demochangeservlet </url-pattern> </servlet-mapping> <welcome-file-list> htm </selcome-file> <welcome-file> index.jsp </welcome-file> <welcome-file> default.html </welcome-file> <welcome-file> default.htm </welcome-file> <welcome-file> default.jsp </elcome-file>
ณ จุดนี้ฟังก์ชั่นตารางเดี่ยว JQGrid ได้ถูกนำไปใช้อย่างเต็มที่ โปรดแจ้งให้เราทราบหากมีปัญหาการออกแบบในตัวอย่าง บทความถัดไปจะเริ่มแก้ไขการใช้งานการออกแบบของตารางหลักและตารางทาส โปรดให้ความสนใจกับเว็บไซต์ Direct Script!