Most web applications greet their users with a fancy dashboards to display various statistics of interest. The generation of dashboards are often resource consuming and therefore it is advisable to optimize the page loading time. One option is to display page content while showing certain parts of the page in loading state. In this tip, this is achieved by partially loading parts of the page by using jQuery - javascript ajax library. Though I used Grails in this sample, it can be used for other web programming languages/platforms.
If you landing page is index.gsp or dashboard.gsp, add the following steps.
1. First step is to load the jquery script.
2. Create a place holders for partial loading of the page. I used a table with cells to load the content.
loading ... | loading ... | loading ... |
loading ... | loading ... | loading .. |
3. Create a jquery function to load parts of the pages using ajax.
In the html table tag I used, html elements (div) with ids f1, f2, f3, etc). The jquery load scripts, we are loading each part with function similar to the one below.
$('#f1').load('${createLink(controller:'dashboard', action:'openTickets'}');
You can have a gsp with name openTickets.gsp to render the results generated by the action, 'openTickets' as given in the example. openTickets.gsp need not have usual html, head, body tags. It can simple render a part of the page by using a div tag.
Visit the following link for live demo with the credentials.
user: nitorics
pwd: welcome
http://www.nitorics.com/2010/09/live-demo/
Thanks for this great post... It was exactly what I am looking for.
ReplyDeleteI received an error when running your code, due to the following line(s)
$('#f1').load('${createLink(controller:'dashboard', action:'openTickets'}');
In this post, the closing brackets of createLink is missing, so the correct line would be
$('#f1').load('${createLink(controller:'dashboard', action:'openTickets')}');
Thaks & Best Regards,
André
Thank you very much for this post, I spent more than one week looking for something like this.
ReplyDelete