Recently i got chance to explore Jquery grid. Looks pretty kool to me. I tried to integrate that with Jersey restfull web service.
If you want to search data and want to show that in Jquery grid, then below sample might help.
First you need to include these css and js files in your code. Download then from Jquery and Jgrid site(Google that). |
<link rel="stylesheet" type="text/css" media="screen" href="css/jquery-ui-1.7.1.custom.css" /> <link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" /> <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script> <script src="js/grid.locale-en.js" type="text/javascript"></script> <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script> <script src="js/jquery.json-2.2.min.js" type="text/javascript"> |
|
Html Code for search and Jquery Grid |
<form name="search" id="search" method="post"> <table > <tr> <td> Brand</td> <td> <select name="brand" id="brand"><option value="">Select</option> <option value="b1">Brand 1</option> <option value="b2">Brand 2</option> <option value="b3">Brand 3</option> </select></td> </tr> <tr> <td> Medical Topics</td> <td> <select id="medicalTopic" name="medicalTopic"><option value="">Select</option> <option value="t1">Topic 1</option> < option value="t2">Topic 2</option> <option value="t3">Topic 3</option> </select></td> </tr> <tr> <td> Search </td> <td> <input type="text" id="searchField" name="searchField"> </td> </tr> <tr> <td colspan="2" align="right"> <input type="button" id="searchButton" value="Search"></td> </tr> </table> </form> <div id="dataDiv"> <table id="list2" class="scroll" cellpadding="0" cellspacing="0"></table> <div id="pager2" class="scroll" style="text-align:center;"></div> </div> |
|
Java script code for Jquery Grid |
jQuery("#list2").jqGrid({datatype: "json", colNames:['id','Name', 'Description', 'Checkout', 'CheckIn', 'File'], colModel:[ {name:'id', width:55}, {name:'name',width:100}, {name:'description',width:100}, {name:'fileName',width:100, editable: true, formatter:checkout}, {name:'fileName',width:100,editable: true, formatter:checkIn }, {name:'fileName',width:150, editable: true, formatter:fileLink, align:"right"} ], rowNum:10, rowList:[10,20,30], imgpath: 'css/images', pager: jQuery('#pager2'), sortname: 'id', jsonReader: { repeatitems : false, id: "0" }, viewrecords: true, sortorder: "desc", caption:"Search Result" }).navGrid('#pager2',{edit:false,add:false,del:false}); jQuery("#dataDiv").hide(); |
|
Java script code for search button |
jQuery("#searchButton").click(function(){ var dataString = 'searchField='+ $("#searchField").val() + '&brand=' + $("#brand").val() + '&medicalTopic=' + $("#medicalTopic").val() ; url = "resources/searchData?" + dataString; jQuery("#list2").clearGridData(); jQuery.getJSON(url, function(data) { if (data.records == 0) { jQuery("#dataDiv").hide(); } else { var mygrid = jQuery("#list2")[0]; mygrid.addJSONData(data); myjsongrid = null; jQuery("#dataDiv").show(); } }); }); |
|
We need to create formatters in Jquery Grid to make links and buttons in grid. |
checkout = function (el, cellval, opts){ return '<img src="css/images/checkOut.png" onclick=alert("clicked")>'; } checkIn = function (el, cellval, opts){ return '<img src="css/images/checkIn.png" onclick=alert("clicked")>'; } fileLink = function (el, cellval, opts){ return '<a href="javascript:void(0)" onClick=downloadFile("' + opts.fileName +'")>' + opts.fileName + '</a>'; } // Funtion to download files from server. function downloadFile(fileName){ // Create an IFRAME. var iframe = document.createElement("iframe"); iframe.src = "resources/DownloadFile?name=" + fileName; iframe.style.display = "none"; document.body.appendChild(iframe); } |
|
Server Side Code |
Jersey rest ful services to get Data for our grid |
@Path("searchData") public class SearchDataResource { @Context private UriInfo context; /** Creates a new instance of SearchDataResource */ public SearchDataResource() { } @GET @Produces("application/json") public ItemBean getData(@Context HttpServletRequest request) { SearchCriteria criteria = getSearchCriteria(request); ItemBean bean = new ItemBean(); bean.setRows(search(criteria)); return bean; } private SearchCriteria getSearchCriteria(HttpServletRequest request) { SearchCriteria criteria = new SearchCriteria(); criteria.setKeyword(request.getParameter("searchField")); criteria.setBrand(request.getParameter("brand")); criteria.setTopic(request.getParameter("medicalTopic")); return criteria; } public List search(SearchCriteria criteria){ List items = new ArrayList(); if(criteria.getBrand() != null && criteria.getBrand().length() > 0){ for(Item item : getRecords()){ if(item.getName().equalsIgnoreCase(criteria.getBrand())){ items.add(item); } } }else{ items.addAll(getRecords()); } return items; } private List getRecords(){ List records = new ArrayList(); Item item1 = new Item(); item1.setId(1); item1.setName("b1"); item1.setDescription("test data 1"); item1.setFileName("File1.txt"); Item item2 = new Item(); item2.setId(2); item2.setName("b2"); item2.setFileName("File2.txt"); item2.setDescription("test data 2"); Item item3 = new Item(); item3.setId(3); item3.setName("b2"); item3.setFileName("File3.txt"); item3.setDescription("test data 3"); records.add(item1); records.add(item2); records.add(item3); return records; } } |
|
Search Criteria class |
public class SearchCriteria { private String brand; private String topic; private String keyword; getter and setters...... ................. } |
|
Item Bean Class |
@XmlRootElement public class ItemBean { // "rowa" name should be same private Collection rows = new ArrayList(); public Collection getRows() { return rows; } public void setRows(Collection rows) { this.rows = rows; } } Item Class |
|
Item Class |
@XmlRootElement public class Item { private long id; private String name; private String description; private String fileName; getter and setters...... ................. } |
|
Bonus Bonus Bonus , If you have reached upto here
Woo Hoo Download file with Jersey web service
Download Rest Full Web service code |
@Path("DownloadFile") public class FileDownloadResource { @Context private UriInfo context; /** Creates a new instance of DownloadFileResource */ public FileDownloadResource() { } @GET @Produces("application/xml") public String getXml(@Context HttpServletResponse response, @Context HttpServletRequest request) { String fileName = request.getParameter("name"); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); OutputStream out = null; try { out = response.getOutputStream(); byte[] bbuf = new byte[1024]; File file = new File("C:\\test\\" + fileName); DataInputStream in = null; int length = 0; in = new DataInputStream(new FileInputStream(file)); while ((in != null) && ((length = in.read(bbuf)) != -1)) { out.write(bbuf, 0, length); } } catch (IOException ex) { // Cry and call your mom } return ""; } } |
|
TODO - Try sorting and pagination with Grid. |