Связанные показания:
Организация исследований JQGRID в Java - Advanced Gate (I)
Эта статья официально начинает взаимодействовать с фоном (Java Language), а используемая платформа
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 - веб -проект
Введите имя проекта, чтобы выбрать Java и Tomcat, управляющий проектом. Нажмите Далее, пока на следующей странице нажмите флажок ниже, чтобы автоматически генерировать файл web.xml.
Создайте следующую структуру пакета и создайте новый класс VO (свойства соответствуют полям базы данных один за другим)
Демо. Ява
Пакет com.xeonmic.vo; демо открытого класса {private int id; private String name; private int type; private Double Pay; Private String Text; public demo () {// todo автоматически генерированный конструктор} Text;} public int getId () {return Id;} public void setId (int id) {this.id = id;} public String getName () {return name;} public void setName (string name) {this.name = name;} public int getType () {return type;} public settype (int type) {this.type = woutpepe = in publicpe; {return pay;} public void setPay (double pay) {this.pay = pay;} public String getText () {return Text;} public void setText (String Text) {this.Text = text;}@переопределить строку ToString () {return "demo [id =" + id + ", name =" + name + ", type =" + "," + " +" + " +" + " +" + " +" + " +" + " +" + " +", " +", " +", " +", " +" + "," + "," + "," + " +", " +" + "," + "," + "," + " +", " +", " +". "]";}}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; import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; открытый класс база данных Dburl = "jdbc: mysql: // localhost: 3306/jqgriddemo"; частная статическая конечная строка dbuser = "root"; частная статическая конечная строка dbpassword = "1234"; private connect = null; publicatabaseConnection () {try {class.forname (dbdriver); Dbuser, dbpassword);} catch (classnotfoundexception e) {// todo автоматически сгенерированный блок Catch e.printstacktrace ();} catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace ();} // system.out.println ("connect scilectable") this.conn;} public void close () {if (this.conn! = null) {try {this.conn.close ();} catch (sqlexception e) {// todo автоматически сгенерированный блок e.printstacktrace ();}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}―3.2. Demodao.java
Пакет com.xeonmic.dao; import java.util.list; import com.xeonmic.vo.demo; public interface demodao {// добавить метод public boolean docreate (demo demo); // Query Метод публичного списка <demo> dosearch (String keys); // public boolean dodelete dodelete (int id); демо);}―3.3. Demodaoimpl.java
пакет com.xeonmic.dao.impl; import java.sql.connection; импорт java.sql.preparedStatement; import java.sql.resultset; import java.sql.sqlexception; import.util.arraylist; import.util.list. com.xeonmic.vo.demo; открытый класс demodaiumpl реализует demodao {частное соединение conn = null; private prosestatement pstmt = null; public demodaoiMpl (connect conn) {this.conn = conn;}@overridepublic boolean docreate (demo demo) {boolean flag = false; t_demo (type, pay, name, text) values (?,?,?,?) "; try {this.pstmt = this.conn.prepareStatement (sql); this.pstmt.setint (1, demo.gettype ()); this.pstmt.setDouble (2, demo.getPay (); demo.getName ()); this.pstmt.setString (4, demo.getText ()); if (this.pstmt.executeupdate ()> 0) {flag = true;} this.pstmt.close ();} catch (sqlexception e) {// todo Auto-Generated Catch Black E. flag;}@overridepublic list <domo> dosearch (String Keys) {// TODO Auto Generated Method Stubif (keys == null) {keys = "";} String SQL = "Select ID, Type, Pay, Text From From The T_Demo"+keys; sist <demo> all = new arraylist <); {this.pstmt = this.conn.prepareStatement (sql); resultset rs = this.pstmt.executequery (); demo demo = null; while (rs.next ()) {demo = new Демо (Rs.getint ("id"), Rs.getint ("type"), Rs.getDouble ("Pay"), Rs.getString ("name"), Rs.getString ("text")); all.add (demo);} this.pstmt.close (); } catch (sqlexception e) {// todo автоматически сгенерированный блок Catch e.printStackTrace ();} return All;}@overdePublic boolean dodelete (int id) {boolean flag = false; string sql = "удалить из t_demo, где id =?" this.conn.prepareStatement (sql); this.pstmt.setint (1, id); if (this.pstmt.executeupdate ()> 0) {flag = true;} this.pstmt.close ();} catch (sqlexception e) {// todo Automatic Automats Block e.printcktrce () stect stectbure; Boolean Dochange (Demo Demo) {boolean flag = false; string sql = "Обновление t_demo set type =?, pay =?, name =?, text =? где id =? demo.gettype ()); this.pstmt.setDouble (2, demo.getPay ()); this.pstmt.setString (3, demo.getName ()); this.pstmt.setString (4, demo.getText ()); if (this.pstmt.executupdate ()> 0). true;} this.pstmt.close ();} catch (sqlexception e) {// todo автоматически сгенерированный блок catch e.printstacktrace ();} return flag;}}―3.5. Factory.java
пакет com.xeonmic.factory; import com.xeonmic.dao.demodao; import com.xeonmic.dao.proxy.demodaoproxy; public class factory {public static demodao getDemodaoinStance () {return nemodaoproxy ();}}}}}}―3.6. Demotest.java (проста
Пакет com.xeonmic.test; import java.util.linkedlist; import java.util.list; import com.xeonmic.factory.factory; import com.xeonmic.vo.demo; демотест открытого класса {public static void main (string [] args) {demo1 = новый demo (); demo1.setname ("name"); demo1.setpay (0.98); demo1.settype (1); demo1.settext ("text"); docReate (demo1); dosearch (null); if (dosearch (null)! = null &&! dosearch (null). doSearch("").get(0);demo1.setText("Change Text");doChange(demo1);doSearch("WHERE id = "+demo1.getId());doDelete(demo1.getId());doSearch(null);}}public static List<demo> doSearch(String keys) {List<demo> allDemos = new LinkedList <Demo> (); alldemos = factory.getDemodaInstance (). Dosearch (Keys); для (демонстрация демо: alldemos) {System.out.println (demo.toString ());} return alldemos;} public static void docReate (demo demo) {if (factory.getDemodainstance (). DocReate (demo) {System.out.println ("Добавить"). {System.out.println ("добавить неудачу");}} public static void dochange (demo demo) {if (factory.getdemodainstance (). Dochange (demo)) {System.out.println ("Модификация была успешной");} else {System.out.println ("Модификация не удалась"); {if (factory.getDemoDaOinStance (). DoDelete (id)) {System.out.println ("Удалить успешно");} else {System.out.println ("DELETE не удастся");}}}/** Результат вывода успешно добавлено SELECT ID, TYPE, PAY, TEXT FROM TOR Pay = 0.98, text = text] выберите идентификатор, имя, тип, платеж, текст из демо -демо [id = 1, name = name, type = 1, pay = 0.98, text = text] Select Id, имя, тип, платеж, текст из t_demo demo [id = name = name, type = 1, pay = 0.98, text = select] select id, name, type, pay, pray ra_dem = type = typemo = texo = texo = texo = texo = texo = texo = tyx -demo. name = name, type = 1, pay = 0.98, text = text] идентификатор модификации SetErect, имя, тип, платеж, текст от t_demo, где id = 1demo [id = 1, имя = имя, тип = 1, плату = 0.98, текст = изменить текст] Удалить успешно выберите идентификатор, имя, тип, оплата, из -за t_demo *//4. JSP страница и раздел сервлета (важно)
―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 ()+": //"+request.getServername ()+":"+request.getSerperport () phate+"/";%> <t) <). "// W3C // DTD HTML 4.01 Transitional // en"> <html> <head> <title> demo </title> <link rel = "stylesheet" type = "text/css" href = "css/jquery-ui.min.css"/> <link relsheet "type/css.min.css"/> <link rel = " href = "css/jquery-ui.theme.min.css"/> <link rel = "stylesheet" type = "text/css" href = "css/ui.jqgrid-bootstrap-ui.css"/> <link rel = "stylesheet" type = "css-ui. /> </head> <body> <div id = "main"> <!-где jqgrid находится-> <таблица id = "grid-table"> </table> <!-JQGrid обзор навигационной панели-> <div id = "grid-pager"> </div> </div> <script src = "js/jquery-1.10.0.min.jscript". charset = "utf-8"> </script> <script src = "js/i18n/grid.locale-cn.js" type = "text/javascript" charset = "utf-8"> </script> <script src = "js/jquery.jqgrid.min.js" type = "javascript" js/jquery.jqgrid.min.js " charset = "utf-8"> </script> <script type = "text/javascript"> // Когда DataType "Local", вам нужно заполнить var grid_selector = "##grid-table"; var pager_selector = "#grid-pager"; Понимание: «<%= basepath%>»+«demoservtlet», // Сервлет urllediturl, используемый для добавления, модификации и удаления: «<%= basepath%>»+«демохангервлет», // данные: GRID_DATA, // Когда даттип «локальный», вам необходимо заполнить DatAtype: «json», // Datatype, Local, Local Data, Local Data, JSON, // DatatyP JSONP, XML и т. Д.) Высота: 150, // высота, высота таблицы. Может быть значением, процентом или «Auto'mtype:« Get », // метод отправки Colnames: [« Номер заказа »,« Out-Out-Out Type »,« Общая сумма »,« Заявитель (единица) »,« Примечание »], Colmodel: [{name:« id », индекс: 'id', // index. Параметр его взаимодействия с фоном является Sidxkey: True, // Когда в данных, возвращаемых со стороны сервера, используйте его в качестве единственного Rowid и используйте только один столбец для выполнения этого настройки. Если установлено более одного, выбирается только первый, а другие игнорируются ширина: 100, редактируемые: false, editoptions: {size: «20», maxlength: "30"}}, {name: 'type', index: 'type', width: 200, // editable edable: true, // editable edittype: "Select", // eDitable. Необязательные значения: текст, Textarea, Select, Facebox, пароль, кнопку, изображение и файл.seditoptions: {value: «1: покупка и ввод; 2: вернуть в Enter"}}, {name: 'Pay', Index: 'Pay', ширина: 60, sorttype: "Double", editable: true}, {name: 'name: videtoption: ediTailt: ediate: ediTail: ediTailtop: {size: "20", maxlength: "30"}}, {name: 'text', index: 'text', width: 250, сортируемый: false, edable: true, edittype: "textarea", editoptions: {row: "2", cols: "10"}},], просмотр Rownum: 10, // Отображение количества записей на страницу Rowlist: [10, 20, 30], // массив элементов, используемых для изменения количества строк для отображения раскрывающегося списка. Пейджер: pager_selector, // Навигационная панель просмотра, где расположены страница и кнопки, являются Altrows: True, // устанавливаться как чередующаяся таблица строк, по умолчанию является false // toppager: true, // независимо от того, отображается ли навигационная панель на навигации на нем многоселекно: True, // Будь то просмотр навигационной панели MultiSelect: True/////// true -travigate, как это, так, истинно, является ли это True -travicate. Просмотр навигационной панели является мультисекционной: true, // независимо от того, многое просмотр навигационной панели многосетирован CTRL Keys Multiboxonly: True, // независимо от того, является ли флажок «многоеазмер подсегрированным»: True, // SortName: 'ID', // Метод сортировки по умолчанию. // Auto-width}); // Просмотр навигационной панели, чтобы добавить код функции части $ (grid_selector) .navgrid (pager_selector, {search: true, // retive add: true, // Добавить (офисы могут отображаться только тогда, когда редактируемое). {}, // edit options {}, // добавить параметры {}, // delete options {multipleSearch: true} // Параметры поиска - определить несколько поисков);}); </script> </body> </html>―4.2. Demoservlet.java
пакет com.xeonmic.action; import java.io.ioexception; import java.util.linkedlist; импорт java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservelcevelt; javax.servlet.http.httpservletresponse; import net.sf.json.jsonarray; import net.sf.json.jsonobject; импорт com.xeonmic.factory.factory; импорт com.seonmic.vo.demo;/*** Сервис. SerialVersionUID = 1L;/*** @See httpservlet#doget (httpservletrequest, httpservletresponse response)*/Защищенная void doget (httpservletrequest, httpservletresponse response) thriode verlexception, ioexception {request.setchAcarCoding (ut-8 »; // Если кодирование здесь не установлено, будет искаженная реакция. SetContentType ("text/html; charset = utf-8"); response.setheader («Контроль кэша», «без каша»); int rows = integer.valueof (request.getParameter ("rows")); // количество записей, отображаемых на каждой странице int page = integer.valueof (request.getParameter ("page")); // текущая страница номер строки sord = request.getParameter ("sord"); // Сортировка метода строки sidx = request.getParameter ("sidx"); // Сортировка имени столбца Boolean Search = (request.getParameter ("_ Search"). Equals ("true"))? keys = ""; // Строка условия запроса if (search) {keys = "где"; string filters = request.getParameter ("filters"); // Special Condy System.out.println (Filters); // Формат входящих данных аналогичны этим: "{" Groupop ":" и "," Rules ": [{" Field ":" id "," op ":" eq "," data ":" 1 "}, {" Field ":" type "," op ":" ew "," data ":" 2 "}]}" jsonObject jsonObject = jsonObject.fromObject (filters); (и/или) if (jsonObject.getString ("GroupOp")! = null &&! "". equals (jsonObject.getString ("Groupop"))) {if (jsonObject.getString ("GroupoP"). Equals ("или")) {Groupop = "или";} jsonArly vluj jsonobject.getjsonarray ("Правила"); // Случайное условие для (int z = 0; z <ravelyjson.size (); z ++) {object t = ravicjson.get (z); Jsonobject rulejson = jsonobject.fromobject (t); string field = rulejson.getstring ("field"); string op = rulejson.getString ("op"); String Data = rualJson.getString ("Data"); String String = "; // используется для хранения единого условия Fragment/stuctrampt/straction wep (op) wep ratempt raffer/wep wearm wep rabment {op opql" (opq) wep wep (opq). string = "= '"+data+"'";; break; case "ne": // unieral String = "<> '"+data+""; "; break; case" li ": // меньше, чем String =" <"+data+"' "; break; case" le ": // меньше или равна String =" <= '"+data+" "; "; break; case" ge ": // больше или равна string ="> = '"+data+"' "; break; case" bw ": // между ... {if (data.split (", "). Length == 2) {string =" между '"+data.split (", ") [0]+" и "+data.split (") [1] "; '+Data+"'"; // Обработка, когда ошибки данных}} break; case "bn": // не между ... {if (data.split (","). Length == 2) {string = "не между '"+data.split (",") [0]+"и" "+data.split (", ") [1]+" "+"+"'+" '+"'+''+" '+' '+' '+' '+' '+'+" "; // обрабатывать, когда ошибки данных}} break; case" ew ": // end с ... string =" like '%"+data+" ";"; break; case "en": // не заканчивать ... string = "не как"%"+data+" "; break; case" cn ": // содержит String = like'%"+"%"; '%"+data+"%' "; break; case" в ": // in {string =" in ("; string [] datas = data.split (", "); for (int i = 0; я <datas.length; i ++) {string+= "'"+datas [i]+"'"; if (i! = datas.length-1) {string+= ",";} else {String+= ")";}}} break; case "ni": // не в {string = "не в ("; string [] datas = data.split (",", "); i ++) {string+= "'"+datas [i]+"'"; if (i! = datas.length-1) {string+= ",";} else {String+= ")";}}} break; default: op = null; System.out.println ("Op Symbol Error"); // Op Symbol}} if (if! (z == ravicsjson.size ()-1) {keys+= ""+field+""+string+"";} else {keys+= ""+field+""+string+""+Groupop+"";}}}} // asconding and incing sql {System.out.println (sidx); keys += "order by" +sidx; system.out.println ("sord =" +sord); if (! Sord.equals ("asc")) {keys += "desce";}} alllist = factory.getDemoDainStance (). Dosearch (keys);//pagination spate spect = 0 int int int int int int int int int int int int ittle = 0 pagination spate = 0 ittle. total = (alllist.size ()%Rows == 0)? (AllList.Size ()/Rows): ((AllList.Size ()/ROWS): ((AllList.Size ()/Rows) +1); int J = 0; int m = (page-1)*rows; int n = (page-1)*rows+rows; jsonArray jarray = new jsonArlay =); J <AllList.Size () && J <N; Всего); jjson.accumulate ("records", alllist.size ()); jjson.accumulate ("row", jarray); system.out.println (jjson.tostring ()); response.getwriter (). Httpservelletresponse response)*/httpservaltresponse response)*/―4,3. Demochangeservlet.java
пакет com.xeonmic.action; импорт java.io.ioexception; import javax.servlet.servletexception; импорт javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.httpservonse; com.xeonmic.factory.factory; import com.xeonmic.vo.demo; открытый класс DemochangeRvlet Extends httpservlet {/****/private static final long serialversionuid = 1l;/*** Метод Сервлета. <br> ** Этот метод вызывается, когда в форме есть метод значения тега, равный, чтобы получить.** @param Запрос запроса Отправить клиентом на сервер* @param ответ Отправление Сервером на клиенту* @throws servletexception, если возникнет ошибка* @throws ioexception uexception servection servection servection servection, htoexcrectessevessevessevessevessevessessevessevessevessevessevessevessevessevessesevessesevessesevessevessevessevessesevesse), если бы произошла ошибка. {boolean flag = false; string opera = request.getParameter ("oper"); switch (oper) {case "del": {string [] ids = request.getParameter ("id"). split (","); for (int i = 0; i <ids.length; i ++) {int id = Integer.valueof (ids [i]); flag = factory.getDemodaInstance (). Dodelete (id);}} break; case "add": {int type = integer.valueof (request.getParameter ("type")); Double Pay = double.valueof (request.getParameter ("pay"); text = request.getParameter ("text"); demo demo = new demo (-1, type, pay, name, text); flag = factory.getdemodainstance (). DocReate (demo); } break; case "edit": {int id = integer.valueof (request.getParameter ("id")); int type = integer.valueof (request.getParameter ("type")); double pay = double.valueof (request.getParameter ("pay")); sline name.getParameter (name ") string vextArametar); DEMO = новая демонстрация (ID, тип, оплата, имя, текст); flag = factory.getDemoDaOinstance (). Dochange (Demo); } break; по умолчанию: Break;} System.out.println (flag);}/*** Метод сервлета. <br> ** Этот метод вызывается, когда в форме есть метод значения тега, равный публикации.** @param Запрос запроса отправлена клиентом на сервер* @param response Ответ Отправлено сервером на клиент* @Throws ServletExcept IoException {this.doget (запрос, ответ);}}―4.4.web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml/ns/javaee "//xmlns.jcp.org/xml/ns/javaee "//xmlns.jcp.org/xml/ns/javaee xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/weece_3_1" id = "webApp_id" version = "3.1"> <Slame-name> jqgrid </display-name> <vervlet> <servlet-name> demoservlet </servlet-name> <vervlet-class> com.xeonmic.action.demoservlet </servlet-class> </servlet> <serlet> <servlet-name> demochesserv let </servlet-name> <bertlet> com.xeonmic.action.demochangeservlet </servlet> </servlet> <servlet-mapping> <servlet-name> demoservlet </servlet-name> <url-pattern>/demoservlet </url-pattern> </servlet g> <servlet-mapping> <servlet-name> demochangeServlet </servlet-name> <url-pattern>/demochangeservlet </url-pattern> </servlet-mapping> <selcown-file-list> <welcessfile> index.html </werveding-file> <selcopply-file> Index. htm </werveding-file> <selcopply-file> index.jsp </werveding-file> <selcload-file> default.html </wervelode-file> <selcownfile> default.htm </werveding-file> <selcopport-file> default.jsp </wervedied-file> </werveding-file> </web-app>
На этом этапе функция отдельной таблицы JQGRID была полностью реализована. Пожалуйста, дайте мне знать, если есть какие -либо проблемы с дизайном в примере. Следующая статья начнет решать проектную реализацию мастера и рабов. Пожалуйста, обратите внимание на веб -сайт Script Direct!