Bootstrap의 기본 테이블 구성 요소는 간단한 데이터 디스플레이 만 충족 할 수 있으며 더 많은 운영 요구 사항을 충족 할 수 없습니다. 물론 "DataTables-1.10.11"이라는 부트 스트랩 기반 테이블 구성 요소를 찾을 수 있지만 API에 대해 잘 모르면 사용하기가 고통 스럽습니다. 그러나 JQGRID를 사용하기로 선택하면이 튜토리얼을 사용하면이 작동 테이블에 대한 솔루션이 제공됩니다.
1. 효과 디스플레이
좋아,이 사진을 보여주세요. 나는 당신이 JQGRID의 부트 스트랩 버전과 사랑에 빠졌다고 생각합니다. 부트 스트랩과 매우 호환되며 단순히 완벽합니다. 물론 이것은 이유의 jqgrid를 약간 변경하고 구성 요소를 캡슐화해야합니다.
2. 리소스 다운로드
어쨌든, 나는 공유를 좋아합니다. JQGRID의 공식 웹 사이트에서 JQGRID의 구성 요소 코드를 다운로드 할 수 있지만 다운로드 후 몇 가지 변경이 필요합니다. 그런 다음 수정 된 JQGRID를 GIT에 직접 업로드하고 제공된 파일을 해당 프로젝트로만 가져와야합니다.
또한 jQuery-UI-1.10.0.custom.css 를 다운로드해야하며 다운로드 주소를 제공하지는 않지만 확실히 찾을 수 있다고 생각합니다. 자주 사고가있는 바이두 소녀를 사용하더라도 찾을 수 있습니다.
3.이 기사는 무엇입니까?
QQ 그룹을 만든 이후 일부 학생들은 "encessant stream"으로 그룹에 합류했지만 그룹의 첫 단계가 데모 또는 프로젝트 코드를 요청하기 위해 나에게 왔다는 것을 알게되었습니다. 나는 이것을 좋아하지 않는다. 스스로하고 다음을 구현하고 변형하면 자신의 일이 될 것입니다. 내 코드를 완전히 복사하면 더 많은 도움을받지 못할 것입니다. 위의 학생들이 공부할 때 주도권을 잡기를 바랍니다.
위의 작은 말도 안되는 말을 한 후, 요점으로 돌아가서 블로그가 주로 이야기하는 내용과 부트 스트랩에 JQGRID를 포함시키는 열쇠는 무엇인지 이야기합시다. 다음과 같이 요약합니다.
부트 스트랩의 JQGRID 레이아웃 체계 JQGRID의 자체 구성 매개 변수 JQGRID의 모듈 식 JQGRID 데이터 작동 부트 스트랩에서
설명을 위해 위의 부분으로 잠정적으로 나뉘어 있지만 공간 제한으로 인해 아이디어와 일부 코드 만 블로그에 제공됩니다.
①. 부트 스트랩에서 jqgrid의 레이아웃 계획
<! doctype html> <html lang = "zh-cn"> <%@ page language = "java"contenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <%@ 포함 file = "/common/common/taglib.jsp"%@ file = "/components/common/csslib.jsp"%> <head> <inlink type = "text/css"rel = "stylesheet"href = "$ {ctx} /css/deal/my_pay_list.css"/> </head> <body> <body> <body> <sody_pay_list.cs "/> </head> <body> <body> <body> action = "$ {ctx}/deal/date/dataablePayDealordersList"method = "post"> <div> <div> <레이블 "이름"> 프로젝트 이름 : </label> <div> <입력 유형 = "text"name = "name"id = "name" "name" "place hame"value = ""버튼 = ""버튼 " id = "searchBtn"> 검색 </button> </div> </div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <div> <rel = "jqgridform"> </table> <div id = "pagegridPager"> </div> </div> </form> </div> <%@ include@ conconents/common/jslib.jsp "%> src = "$ {ctx} /js/deal/my_pay_list.js"> </script> </body> </html>각 사람의 프로젝트는 크게 다릅니다. 나열된 코드에서는 JQGRID 섹션에만 중점을 둡니다.
id="jqgridForm" , 여기에는 jqgrid에 대한 검색 조건 계층, 즉 렌더링에 나열된 검색 부분이 포함 된 양식이 있습니다. 검색 버튼을 클릭하면 양식 필드의 쿼리 조건이 컨트롤러에 제출되고 얻은 데이터가 얻어집니다. id="searchBtn" 은 나중에 모듈 식에서 사용되는 검색 버튼을 정의합니다. <table id="pageGrid" rel="jqgridForm"></table> <div id="pageGridPager"></div> jqgrid의 테이블 요소와 jqgrid의 바닥 글 요소를 정의합니다. 내 프로젝트에서 사용하는 규칙은이 규칙에 일시적으로 동의하며 귀하의 규칙을 가질 수도 있습니다. REL별로 양식의 ID를 지정하면 테이블 검색 양식을 사용하는 것이 더 쉽습니다. JQGRID의 자체 건설 매개 변수
매개 변수를 구성하여 ①에서 my_pay_list.js로 추출했습니다.
$ (function () {var jqoption = {datatype : "xml", mtype : "post", shrinktofit : true, viewrecords : false, rownumbers : false, autowidth : true, height : "100%", colnames : [ 'id', 'status', 'project status', 'project number', 'suppert', '' ',' ',' ',' ','suppert Number ',' ','Project Number ','Project Number ','Project Number ','Project Number ', 수량 ','주문 상태 ','작동 '], Colmodel : [{name :'id ', index :'id ','id ', hidden : true}, {name :'status ', index :'status ', hidden : true}, {name_str', index : 'image_str', width : 140, sortable : false : fortion (cellval, reports) (CellValue == '총 결제 비용 :') {return CellValue}}, aLign : 'left'}, 'name :'oper ', index :'Oper ', width : 90, 거짓, 거짓, Align :'Center ', formatter : fortmat : fortmat : fortmater : var atritation = {var status = parseint (rowobject) .find ( "상태"). {return '<a target = "_ blank"href = "' + common.ctx + '/showdealor/' + id + '"> </a>'; }], XMLREADER : {reportItems : false : "pagegrid", row : "map", page : 'page', 'page', 'total :'total : 'total :'total : 'total :'records : 'records', id : 'id'}, 'id'}, rownum : 50, rowlist : [50, 100, 200, 300], Pageer : "#PageGridPager : true, giderror : yunm. function () {var $ form = $ ( "#" + $ ( "#pagegrid"). attr ( "rel"); $ ( "#pagegrid"). "set", {image_str : "총 지불 비용 :", json.message}); // ($ .fn.ajaxtodialog) {$ ( "A [target = 대화]", $ ( "#pagegrid"). ajaxtodialog ();JQGRID에 익숙하지 않은 학생들은 JQGRID의 데모와 JQGRID의 공식 문서를 먼저 읽는 것이 좋습니다. 물론, 이미 JQGRID에 익숙한 학생들에게는 DOC 및 DEMO가 반드시 읽어야합니다.
위 파일에는 나열된 많은 속성이 있습니다. 나는 JQGRID를 너무 많이 소개하지 않을 것입니다. 이 기사의 주요 주제는 jqgrid를 부트 스트랩에 포함시키는 방법을 소개하는 것입니다. 핵심 요점은 JQGRID를 도입하지 않는 것입니다. 몇 가지 핵심 사항 만 소개합니다.
formatter: function(cellvalue, options, rowObject) { , Formatters는 여전히 매우 자주 사용되므로 해당 셀의 값을 얻는 것이 매우 중요합니다. 내 JQGRID는 XML (DataType : "XML") 데이터 형식을 사용하므로 해당 Deal_Id 열의 값을 $(rowObject).find("deal_id").text() 찾을 수 있습니다. xmlReader : { repeatitems : false, root : "PageGrid", XMLREADER의 매개 변수 값에주의를 기울입니다. 다음 소개에서 JQGRID의 데이터 작동이 자세히 소개되며, 이는 배경 XML 데이터 캡슐화와 관련이 있습니다. $("#pageGrid").footerData("set", {image_str : "支付总花费:", order_price : json.message}); , 바닥 글라 타 방법과 관련하여 사용하기에 매우 편리하며 효과는 효과로 참조 될 수 있습니다. initEnv(jqOption); 방법. 페이지 onload 후에는 JQGRID의 초기화 매개 변수를 InitENV 메소드로 전달합니다. 부트 스트랩에서 JQGRID의 후속 모듈화에서 initENV 메소드를 소개합니다. ③, 부트 스트랩의 JQGRID 모듈 식
the에서는 initenv 방법을 발견 하므로이 방법은 JQGRID를위한 모듈 식 캡슐화 작업으로 구축됩니다.
initenv 방법
function initenv (jqoption) {$ (window) .resize (function () {initlayout ();}); initui (null, jqoption);}이 방법에서는 initlayout 메소드와 initui 메소드가 표시되며 특정 컨텐츠가 나중에 소개됩니다.
initlayout
function initlayout () {$ ( "테이블 [rel = jqgridform]"). 각 (function () {var rel = $ (this) .attr ( "rel"); if (rel) {var $ form = $ ( "#" + rel); var tableWidth = $ form.width (); $ (this) .SetGridWidth (tablewidth, true);}};즉, 창이 스케일링되면 JQGRID가 부트 스트랩의 반응 형 레이아웃에 적응할 수 있도록 너비를 다시 드러냅니다. 사용 된 방법은 jqgrid의 setgridwidth 메소드입니다.
이르 투이
함수 initui (_box, jqoption) {var $ p = $ (_ box || 문서); if (jqoption) {yunm.debug ( "initializejqgrid"); var $ form = $ ( "#" + $ ( "#pageGrid"). att ( "rel"); yunm.debug (yunm.array2obj ($ form.serializearray ())); // 초기화 var op = $ .Extend ({url : $ form.attr ( "action"), postData : yunm.Array2Obj ($ form.serializearRay ()), jqoption); $ ( "#pagegrid"). jqgrid (op); // search button $ ( "#searchBtn", $ form) .click (function () {$ ( "#pageGrid"). jqGrid ( 'setGridParam', {url : $ form.attr ( "action"), page : 1, postData : yunm.Array2oBj ($ form.serializearRay ()); $ ( "#pagegrid"). trigger ( "ReloadGrid"); // 도구 모음, 버튼 $ ( ". btn", $ form)의 둥근 모서리를 제거합니다 (function () {var $ this = $ (this); $ this.css ({ "Border-Radius": "0px", "Border-Bottom": "0",});}); }} array2obj : 함수 (array) {var params = $ ({}); $ .Each (Array, function (i) {var $ param = $ (this) [0]; paramstr ($ param.name, $ param.value);}); return params [0];},이전 기사 시리즈를 읽은 경우 Initui 방법에 너무 익숙하지 않습니다. DWZ에 익숙한 친구들은 자연스럽게 익숙하지 않을 것입니다. 내 프로젝트의 대부분의 템플릿은 여전히 DWZ에 의존합니다. 이 노인들에게 감사합니다.
var $form = $("#" + $("#pageGrid").attr("rel")); JQGRID에서 양식 양식 조건을 연관 시키므로 양식 객체를 여기에서 얻을 수 있습니다. 양식 객체를 얻으면 자연스럽게 검색 필드 ( $form.serializeArray() )의 값을 얻게됩니다. 양식 양식의 검색 필드 값을 얻은 후에는 현재 처리를 수행해야합니다. JQGRID가 매개 변수를 컨트롤러로 전달할 때 페이징 및 정렬 된 관련 필드 (페이지, 행, Sord, SIDX)를 보내야한다는 것을 알고 있습니다. 사용 된 방법은 $("#pageGrid").jqGrid({postData:xxx}); 일반적으로 양식 양식을 보내면 $form.serializeArray() 만 사용하면되지만 현재로서는 xxx를 $form.serializeArray() 로 바꾸면 페이징 및 정렬 된 관련 필드 (페이지, 행, Sord, SIDX)를 컨트롤러에서 얻지 못합니다. 이것은 갈등입니다. 이 시간을 처리하는 방법은 무엇입니까? 해결책은 양식 데이터 (Array2OBJ 메서드)를 객관화 한 다음 var op =$.extend({url:$form.attr("action"),postData:YUNM.array2obj($form.serializeArray()),},jqOption);$("#pageGrid").jqGrid(op); 를 통해 컨트롤러에 페이징 및 정렬의 관련 필드와 함께 검색 필드의 값을 보내는 것입니다. var op =$.extend({url:$form.attr("action"),postData:YUNM.array2obj($form.serializeArray()),},jqOption);$("#pageGrid").jqGrid(op); $("#searchBtn", $form).click 클릭 이벤트를 캡슐화하여 JQGRID의 데이터를 다시로드합니다. $(".btn", $form).each(function() { 여기서 메소드는 버튼을 검색하여 코너를 제거하여 JQGRID에 더 적합하게 만들려면 렌더링을 참조하십시오. JQGRID의 데이터 작동.
데이터 작동 부분에는 검색 매개 변수 통과, Pagination 정렬 매개 변수 전달 및 SQL 문 작성이 포함됩니다.
매개 변수 전달과 관련하여 프론트 엔드 매개 변수 캡슐화가 ③에 도입되었습니다. 컨트롤러에서 데이터가 어떻게 처리되는지 살펴 보겠습니다.
먼저 JQGRID에서 XMLREADER의 데이터 소스 인 PageGrid를 정의하겠습니다.
package com.honzh.common.page; import java.util.list; import com.thoughtworks.xstream.annotations.xstreamalias; @xstreamalias ( "pagegrid")@suppresswarnings ( "rawtypes") public class pagegrid {private int page; 개인 INT 총계; 개인 INT 레코드; 개인 목록 데이터; public int getpage () {return this.page; } public void setPage (int page) {this.page = page; } public int getTotal () {return this.total; } public void settotal (int total) {this.total = Total; } public int getRecords () {return this.records; } public void setRecords (int Records) {this.records = records; } public list getData () {return this.Data; } public void setData (목록 데이터) {this.data = data; }}프로젝트에서 xstream.jar가 필요하고 직접 다운로드해야합니다.
xstreamComponent.java
패키지 com.honzh.common.page; import org.apache.commons.commons.lang.stringUtils; import com.thoughtworks.xstream.xstream; import com.thoughtworks.xstream.converters.converter; import com.thevingworks.xstream.io.xml.domdriver; import.xstream.xstream.mapper.defaultmapper; com.thoughtworks.xstream.mapper.xstream11xmlliflinglymapper; public class xstreamcomponent {private xstream xstream; public static xstreamComponent newInstance () {xstreamComponent xmlcomponent = new xstreamComponent (); xmlcomponent.alias (new class [] {pagegrid.class}); XMLComponent를 반환합니다. } public xstreamComponent () {this.xstream = new xstream (new domdriver ()); } public String toxml (Object obj) {reture this.xstream.toxml (obj); } public String topagexml (Object OBJ) {regis return toxml (obj); } pagexml (string xml) {registerConverter (new mapCustomConverter (새 defaultMapper (XStream11XMLFINGHINTINGMAPPER.CLASS.GETCASS.GET))); Fromxml (xml)을 반환합니다. } 공개 객체 Fromxml (String XML) {reture this.xstream.fromxml (xml); } @suppresswarnings ( "rawtypes") public void processAnnotations (클래스 유형) {this.xstream.processAntations (type); } @suppresswarnings ( "rawtypes") public void processAnnotations (class [] type) {this.xstream.processAntations (type); } @suppresswarnings ( "rawtypes") public void alias (문자열 이름, 클래스 유형) {this.xstream.alias (이름, 유형); } @SuppressWarnings ( "rawTypes") public void alias (class [] type) {for (class : type) {String classname = type.getName (); {string [] classNames = StringUtils.split (className, "."); this.xstream.alias (classNames [(classNames.Length -1)], type); } catch (예외 예) {this.xstream.alias (className, type); }}} public void RegisterConverter (Converter Converter) {this.xstream.registerConverter (변환기); } @suppresswarnings ( "rawtypes") public void useattributefor (class definedin, string fieldname) {this.xstream.useattributefor (definedin, fieldname); }}PageGrid는 주로 XML 객체로 캡슐화 된 다음 프론트 엔드로 전달됩니다.
MapCustomConverter.java
package com.honzh.common.page; import java.util.hashmap; import java.util.hashtable; import java.util.iterator; import java.util.map; import com.thoughtsworks.xstream.converters.marshallingcontext; import com.xstream.colverters.collection com.thoughtworks.xstream.io.hierarchicalStreamReader; import com.thevoughtworks.xstream.io.hierarchicalStreamwriter; import com.thoughtworks.xstream.mapper.mapper; public collectioncustomverter {public mapcustomconverter (Mapper) {Super (mapper) {슈퍼); } @suppresswarnings ( "rawtypes") public boolean canconvert (클래스 유형) {return (type.equals (hashmap.class)) || (type.equals (hashtable.class)) || (type.getName (). Equals ( "java.util.linkedhashmap") || (type.getName (). equals ( "sun.font.attributemap"); } @suppresswarnings ({ "rawtypes"}) public void Marshal (객체 소스, 계층 적 스트림 라이터, MarshallingContext 컨텍스트) {map map = (map) 소스; for (iterator iterator = map.entryset (). iterator (); iterator.hasnext ();) {map.entry entry = (map.Entry) iterator.next (); writer.startNode (Entry.GetKey () == null? "null": entry.getKey (). toString ()); writer.setValue (entry.getValue () == null? "": enterd.getValue (). toString ()); writer.endnode (); }} @suppresswarnings ( "rawtypes") public object undarshal (HierarchicalStreamreader reader, unmarshallingcontext context) {map map = (map) createCollection (context.getRequiredType ()); populatemap (독자, 컨텍스트,지도); 리턴 맵; } @suppresswarnings ({ "rawtypes", "unchecked"}) 보호 된 void populatemap (HierarchicalStreamReader reader, unmarshallingContext 컨텍스트, 맵 맵) {while (reader.hasmorechildren ()) {reader.movedown (); 개체 키 = reader.getNodeName (); 객체 값 = reader.getValue (); map.put (키, 값); reader.moveup (); }}}주로 데이터베이스에서 검색된 해시 맵을 표준 XML 형식 데이터로 변환합니다.
baseconditionvo.java
pack.honzh.common.persistence; import java.util.hashmap; import java.util.map; import org.apache.session.session.rowbounds;/** * 매개 변수 설정 클래스. 페이지. <br> * 3. numperpage 확대-페이지가 많이 표시됩니까? 비어 있으면 page_show_count가 표시됩니다. <br> * 4.totalcount 대. TotalCount/NumperPage = 몇 페이지 <br> * 5.orderfield) 수. <br> * 6.oderdirection) 정렬 방향. * </p> */public class baseconditionvo {public final static int page_show_count = 50; 개인 int pagenum = 1; 개인 int numperpage = 0; 비공개 Long TotalCount = 0; 개인 문자열 orderfield = ""; 개인 문자열 orderDirection = ""; /*** @fields ps : 매개 변수 유형을 캡슐화합니다. */ private map <string, object> mo = new Hashmap <String, Object> (); public int getpagenum () {return pagenum; } public void setpagenum (int pagenum) {this.pagenum = pagenum; } public int getNumperPage () {return numperPage> 0? numperpage : page_show_count; } public void setNumperPage (int numperPage) {this.numperPage = numperPage; } public String getOrderfield () {return Orderfield; } public void setorderfield (String Orderfield) {this.orderfield = Orderfield; } public String getOrderDirection () {return "desc".Equals (OrderDirection)? "Desc": "ASC"; } public void setOrderDirection (String OrderDirection) {this.OrderDirection = OrderDirection; } public long getTotalCount () {return totalCount; } public void settoTalCount (Long TotalCount) {this.totalCount = TotalCount; } public int getStartIndex () {int pagenum = this.getPagenum ()> 0? this.getPagenum () -1 : 0; return pagenum * this.getNumperPage (); } public rowbounds createrowbounds () {rowbounds ro = new rowbounds (this.getStartIndex (), this.getNumperPage ()); RO; } / ** * @title : addParams * @Description : 쿼리 조건 추가 * @param key * @param value * / public void addparams (문자열 키, 개체 값) {this.getMo (). put (키, 값); } / ** * @title : getParams * @description : query 조건 get * @param key * @return * / public object getParams (String key) {return this.getMo (). get (key); } / ** * @ @return the mo * / public map <string, object> getmo () {return mo; } / ** * @param mo * set * / public void setmo (map <string, object> mo) {this.mo = mo; } @override public String toString () {return "조건 :" + pagenum + "," + numperPage + "," + totalCount + "," + OrderField + "," + OrderDirection + "," + mo; }}페이징, 정렬 및 검색 필드를 포함한 Pagination의 쿼리 데이터 객체.
보호 된 BaseConditionVo getBaseConditionVofortable () {BaseConditionVo Vo = New BaseConditionVo (); // Pagination 매개 변수 int currentpage = getParatoint ( "page"); int 크기 = getParatoint ( "행"); String Sortorder = getPara ( "Sord"); String SortCol = getPara ( "sidx"); Vo.SetNumperPage (크기); vo.setpagenum (currentpage); Vo.SetorderField (SortCol); Vo.SetOrderDirection (SortOrder); 반환 VO; } JQGRID로 전달한 매개 변수를 BaseConditionVo Pagination Query Object로 변환합니다. 보호 void renderxml (httpservletresponse res, String xmlresponse) {try {res.setcharacterencoding ( "utf-8"); res.setheader ( "content-type", "text/xml"); printwriter out = res.getwriter (); out.print (xmlresponse); if (out! = null) {out.close (); }} catch (ioexception e) {logger.error (e.getMessage ()); logger.error (e.getMessage (), e); }}출력 스트림에 XML을 씁니다.
이러한 기본 객체를 정의한 후 데이터를 얻고 통과하기 시작합니다.
@SuppressWarnings ( "rawtypes") @requestmapping (value = "datablePayDealordersList") public void dataPayDealordersList (httpservletResponse 응답) {try {logger.debug ( "내가 지불 한 주문 받기"); xstreamComponent xstreamComponent = xstreamComponent.newinstance (); // 목록 매개 변수 가져 오기 BaseConditionVo Vo = getBaseConditionVofortable (); vo.addparams ( "이름", getpara ( "name")); logger.debug ( "I Peased 주문 쿼리" + VO); // 내가 만든 프로젝트 목록 MyDealorders = DegorderService.getByissueUid (vo, vo.createrowbounds ()); long count = deberorderservice.searchissuetotalcount (VO); 문자열 xmlresponse = xstreamcomponent.topagexml (createPageGrid (myDealorders, vo, count.intValue ())); renderxml (응답, xmlresponse.replaceall ( "__", "_")); } catch (uncategorizedsqlexception e) {logger.error (e.getMessage ()); logger.error (e.getMessage (), e); renderxml (응답, 상수. Query_error); } catch (예외 e) {logger.error (e.getMessage ()); logger.error (e.getMessage (), e); renderxml (응답, 상수 .server_error); }}자세히 설명해 봅시다 :
1. XStreamComponent.newInstance() XML 스트림 객체를 만듭니다.
2. BaseConditionVO vo = getBaseConditionVOForTable(); 페이지 매김 쿼리 매개 변수 개체를 만듭니다.
3. vo.addParams("name", getPara("name")); 검색 필드의 값을 쿼리 객체에 넣습니다.
4. dealOrderService.getByIssueUid(vo, vo.createRowBounds()); mybatis의 Pagination 쿼리 방법은 매우 간단합니다. 그룹의 친구는 Mybatis의 페이지 매김 구성 요소를 특별히 만들었습니다. 원래 mybatis 쿼리 방법을 사용하는 것이 더 효율적이라고 생각합니다. 그 후, 우리는 mybatis에 XML의 해당 SQL 쓰기 방법을 작성합니다.
5. renderXml(response, xmlResponse.replaceAll("__", "_")); JSP의 출력 스트림에 데이터를 작성하십시오.
마지막으로, mybatis를 통해 페이징 데이터를 얻는 방법을 소개해 봅시다.
Mappper.java
package com.honzh.biz.database.mapper; import java.math.bigdecimal; import java.util.hashmap; import java.util.list; import org.apache.ibatis.session.rowbounds; import com.honzh.common.persistence.basecondvo; problortmapper}; @suppresswarnings ( "rawtypes") 목록 <hashmap> getbyissueuid (baseconditionvo vo, rowbounds createrowbounds);}
Mapper.xml을 전달하려는 두 개체는 BaseConditionVo 및 Paging Rowbounds입니다. XML의 SQL은 자동으로 페이징됩니다.
mappper.xml
< "getByissueUid"resulttype = "hashmap"parametertype = "map"> select *에서 * select * is_delete = 0 <if test = "mo.name! = null 및 mo.name! = ''" "> 및 y.name in harit ( '%', '$ {mo.name}', '<%" Orderfield! = '' ""> Order by $ {orderfield} <if test = "OrderDirection! = null 및 OrderDirection! = ''"> $ {orderDirection} </if> </when> <syre> d.order_time desc </elist> </select> </select>당신은 행 바운드에주의를 기울일 수 없으며, mybatis는 자동으로 당신을 위해 한도를 캡슐화합니다. 검색 도메인의 이름은 Mo.Name 또는을 통해 직접 얻을 수 있습니다. Orderfield 및 OrderDirection도 통과됩니다.
지금까지 JQGRID에 내장 된 전체 부트 스트랩이 성공적으로 끝났습니다. 좋아, 테이블을 멋지게 만드세요!