SlideShare uma empresa Scribd logo
1 de 38
GRAILS & DOJO
About Sven ,[object Object],[object Object],[object Object],[object Object]
Goals ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Getting Started
Getting started… ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
How to add Dojo to your pages ,[object Object],[object Object],[object Object],<script type=&quot;text/javascript&quot; djConfig=&quot;isDebug: true&quot; src=&quot;http://o.aolcdn.com/dojo/0.9.0/dojo/dojo.xd.js&quot;></script> <script type=&quot;text/javascript&quot;> dojo.addOnLoad(function(){ alert('loaded, all good'); }); </script>
Understanding Grails & AJAX ,[object Object],[object Object],[object Object],[object Object]
Dojo is more than AJAX ,[object Object],[object Object],[object Object],[object Object]
Learning Path ,[object Object],[object Object],[object Object],[object Object]
Grails AJAX Tags
 
remoteLink ,[object Object],<div id=&quot;message&quot;></div> <g:remoteLink  action=&quot;remoteLinkCallId&quot;  id=&quot;1&quot;  update=&quot;message&quot;> AJAX Call, id=1 </g:remoteLink> def remoteLinkCallId = {  log.debug(&quot;${actionName} Action called with ${params.id}&quot;) render &quot;You called ${actionName} in ${controllerName} with   ${params.id}&quot; }
formRemote ,[object Object],<g:formRemote  url=&quot;[action:'formRemoteCall']&quot;  name=&quot;form2&quot;  update=&quot;message&quot;  onLoading=&quot;toggleSpinner(true)&quot;  onLoaded=&quot;toggleSpinner(false)&quot; > User: <input name=&quot;user&quot; type=&quot;text&quot;></input> <input type=&quot;submit&quot; value=&quot;formRemote Call&quot;></input> </g:formRemote>  def formRemoteCall = {  log.debug(&quot;${actionName} Action called with ${params.user}&quot;) render &quot;You called ${actionName} in ${controllerName} with     ${params.user}&quot; }
submitToRemote ,[object Object],<g:javascript library=&quot;dojo&quot; /> <g:javascript> dojo.require(&quot;dojo.io.IframeIO&quot;); </g:javascript> <g:form  url=&quot;[action:'submitToRemoteCall']&quot; id=&quot;form2&quot;  enctype=&quot;multipart/form-data&quot;> File: <input name=&quot;someFile&quot; type=&quot;file&quot;></input> <g:submitToRemote  value=&quot;Submit Upload&quot;  name=&quot;form2&quot;  action=&quot;submitToRemoteUpload&quot;  update=&quot;[success:'message',failure:'error']&quot; /> </g:form>
submitToRemote ,[object Object],def submitToRemoteUpload =  { def f = request.getFile('someFile')   if(f.empty) { render &quot;No file!&quot; } else { def fileName = f.getOriginalFilename() render(text:&quot;<html><body><textarea>You called ${actionName} in ${controllerName} with file ${fileName}</textarea></body></html>&quot;, contentType:&quot;text/html&quot;, encoding:&quot;UTF-8&quot;) }   }
remoteField ,[object Object],<g:remoteField before=&quot;if (this.value.length < 3) return false;&quot;  action=&quot;quickSearch&quot; update=&quot;tableContent&quot; name=&quot;search&quot;  paramName=&quot;search&quot;/> <span id=&quot;spinner&quot; style=&quot;display:none;&quot;> <img src=&quot;${createLinkTo(dir:'images',file:'spinner_mac.gif')}&quot; alt=&quot;Spinner&quot; /> </span> def  quickSearch = { def  devices = Device.findAllByModelLike(&quot;%${params.search}%&quot;,  [max:20,  sort :&quot;model&quot;, order:'asc']) render(template:'tableContent', model:[deviceList:devices]) }
remoteField list.gsp <table> <thead> <tr> ... </tr> </thead> <tbody id=&quot;tableContent&quot;> <g:each in=&quot;${deviceList}&quot; var=&quot;device&quot;>   ... </g:each> </tbody> </table> _tableContent.gsp <g:each in=&quot;${deviceList}&quot; var=&quot;device&quot;> <tr>   <td>${device.id}</td>   ... </tr> </g:each>
onXXX Methods
Grails AJAX Tags ,[object Object],[object Object],[object Object],[object Object],[object Object]
Grails AJAX Tags do not provide ,[object Object],[object Object]
Grails AJAX support
Render() is your best friend ,[object Object],[object Object],render &quot;This is easy.“ render &quot;{font:{id:10, name:'Arial'}}&quot; ,[object Object],render(template:'podcastList', model:[podcasts:Podcast. findAll ()])
Rendering JSON ,[object Object],[object Object],[object Object],<?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?><linked-hash-map> <entry> <string>identifier</string> <string>id</string> </entry> <entry> <string>items</string> <list> <linked-hash-map> <entry> <string>id</string> <long>1</long> </entry> <entry> <string>url</string> <string>http://url1/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>2</long> </entry> <entry> <string>url</string> <string>http://url2/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>3</long> </entry> <entry> <string>url</string> <string>http://url3/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>4</long> </entry> <entry> <string>url</string> <string>http://url4/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>5</long> </entry> <entry> <string>url</string> <string>http://url5/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>6</long> </entry> <entry> <string>url</string> <string>http://url6/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>7</long> </entry> <entry> <string>url</string> <string>http://url7/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>8</long> </entry> <entry> <string>url</string> <string>http://url8/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>9</long> </entry> <entry> <string>url</string> <string>http://url9/rss</string> </entry> </linked-hash-map> <linked-hash-map> <entry> <string>id</string> <long>10</long> </entry> <entry> <string>url</string> <string>http://url10/rss</string> </entry> </linked-hash-map> </list> </entry> </linked-hash-map>  {&quot;identifier&quot;:&quot;id&quot;,&quot;items&quot;:[{&quot;id&quot;:1,&quot;url&quot;:&quot;http://url1/rss&quot;},{&quot;id&quot;:2,&quot;url&quot;:&quot;http://url2/rss&quot;},{&quot;id&quot;:3,&quot;url&quot;:&quot;http://url3/rss&quot;},{&quot;id&quot;:4,&quot;url&quot;:&quot;http://url4/rss&quot;},{&quot;id&quot;:5,&quot;url&quot;:&quot;http://url5/rss&quot;},{&quot;id&quot;:6,&quot;url&quot;:&quot;http://url6/rss&quot;},{&quot;id&quot;:7,&quot;url&quot;:&quot;http://url7/rss&quot;},{&quot;id&quot;:8,&quot;url&quot;:&quot;http://url8/rss&quot;},{&quot;id&quot;:9,&quot;url&quot;:&quot;http://url9/rss&quot;},{&quot;id&quot;:10,&quot;url&quot;:&quot;http://url10/rss&quot;}]} XML or JSON?
JSON is easy to read, too { &quot;identifier&quot;:&quot;id&quot;, &quot;items&quot;: [ { &quot;id&quot;:1, &quot;url&quot;:&quot;http://url1/rss&quot; }, { &quot;id&quot;:2, &quot;url&quot;:&quot;http://url2/rss&quot; }, { &quot;id&quot;:3, &quot;url&quot;:&quot;http://url3/rss&quot; }, { &quot;id&quot;:4, &quot;url&quot;:&quot;http://url4/rss&quot; } ] }
JSON is easy to create, too ,[object Object],render(builder:'json')  { element(imagePath: &quot; /app/myimage.png&quot;) } {&quot;element&quot;:{&quot;imagePath&quot;:&quot;/app/myimage.png&quot;}} dojo.io.iframe.send( { url: &quot;/some/url&quot;, form: dojo.byId('formImage'), handleAs: &quot; json &quot;, method: &quot;POST&quot;, handle: function(response, ioArgs)  { var fileName = response.elementImage.fileName; } });
Using converter & Render ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],{ &quot;id&quot;:1, &quot;class&quot;:&quot;Podcast&quot;, &quot;author&quot;:&quot;Author1&quot;, &quot;feedURL&quot;:&quot;http://url1/rss&quot; }
Special Dojo Widgets &  Grails
Data-hungry widgets ,[object Object],[object Object],[object Object],[object Object],[object Object]
Dojo ComboBox & Grails ,[object Object],<div dojoType=&quot;dojo.data.ItemFileReadStore&quot; jsId=&quot;stateStore&quot; url=&quot;<g:createLink controller=&quot;widget&quot; action=&quot;comboboxConverterData“ />&quot;> </div> <input  dojoType=&quot;dijit.form.ComboBox&quot; store=&quot;stateStore&quot; hasDownArrow=&quot;false&quot; value=&quot;&quot; searchAttr=&quot;url&quot; name=“feed&quot; onChange=&quot;setValue&quot; />
Dojo ComboBox & Grails ,[object Object],def comboboxConverterData = { def items = [] def podcasts = Podcast.findAll(); podcasts.each { podcast ->  items << [id:podcast.id, url:podcast.feedURL] } def json = [identifier:&quot;id&quot;, items: items] render json as JSON } ,[object Object]
Dojo FilterSelect & Grails ,[object Object],<div dojoType=&quot;dojo.data.ItemFileReadStore&quot; jsId=&quot;feedStore&quot; url=&quot;<g:createLink controller=&quot;widget&quot; action=&quot;filterSelectData&quot; />&quot;> </div> <input dojoType=&quot;dijit.form.FilteringSelect&quot; id=&quot;chooser&quot; store=&quot;feedStore&quot; searchAttr=&quot;url&quot; name=&quot;feed&quot; autocomplete=&quot;true&quot; pageSize=&quot;5&quot; />
Dojo FilterSelect & Grails ,[object Object],def filterSelectData = {  def items = [] def podcasts = Podcast.findAll(); podcasts.each { podcast ->  items << [id:podcast.id, url:podcast.feedURL] } def json = [identifier:&quot;id&quot;, items: items] render json as JSON } ,[object Object]
Dojo Tree & Grails ,[object Object],<div dojoType=&quot;dojo.data.ItemFileReadStore&quot; jsId=&quot;treeStore&quot; url=&quot;<g:createLink controller=&quot;widget&quot; action=&quot;treeData&quot; />&quot;> </div> <div  dojoType=&quot;dijit.Tree&quot;  store=&quot;treeStore&quot;  childrenAttr=&quot;children&quot;  labelAttr=&quot;url&quot;> </div>
Dojo Tree & Grails ,[object Object],def treeData = {  def items = [] def children = [] (1..3).each { children  << [_reference:&quot;${it}&quot;] } def podcasts = Podcast.findAll(); podcasts.each { podcast ->  items << [id:podcast.id, url:podcast.feedURL,  children:children ] } def json = [ identifier:&quot;id&quot; , label:'url', items: items] render json as JSON }
Tipps & Resources
Resources ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resources ,[object Object],[object Object],[object Object],[object Object],[object Object]
THX Y IM/SKYPE hansamann

Mais conteúdo relacionado

Mais procurados

Usability in the GeoWeb
Usability in the GeoWebUsability in the GeoWeb
Usability in the GeoWeb
Dave Bouwman
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
Julien Lecomte
 

Mais procurados (20)

WordPress and Ajax
WordPress and AjaxWordPress and Ajax
WordPress and Ajax
 
Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09Even Faster Web Sites at jQuery Conference '09
Even Faster Web Sites at jQuery Conference '09
 
Findability Bliss Through Web Standards
Findability Bliss Through Web StandardsFindability Bliss Through Web Standards
Findability Bliss Through Web Standards
 
DevDays09 Internet Explorer 8
DevDays09 Internet Explorer 8DevDays09 Internet Explorer 8
DevDays09 Internet Explorer 8
 
Fast by Default
Fast by DefaultFast by Default
Fast by Default
 
API Technical Writing
API Technical WritingAPI Technical Writing
API Technical Writing
 
How to make Ajax work for you
How to make Ajax work for youHow to make Ajax work for you
How to make Ajax work for you
 
Fast Loading JavaScript
Fast Loading JavaScriptFast Loading JavaScript
Fast Loading JavaScript
 
Challenges of building a search engine like web rendering service
Challenges of building a search engine like web rendering serviceChallenges of building a search engine like web rendering service
Challenges of building a search engine like web rendering service
 
Intro to html5 Boilerplate
Intro to html5 BoilerplateIntro to html5 Boilerplate
Intro to html5 Boilerplate
 
สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1
 
Internet Explorer 8 for Developers by Christian Thilmany
Internet Explorer 8 for Developers by Christian ThilmanyInternet Explorer 8 for Developers by Christian Thilmany
Internet Explorer 8 for Developers by Christian Thilmany
 
Usability in the GeoWeb
Usability in the GeoWebUsability in the GeoWeb
Usability in the GeoWeb
 
Don't make me wait! or Building High-Performance Web Applications
Don't make me wait! or Building High-Performance Web ApplicationsDon't make me wait! or Building High-Performance Web Applications
Don't make me wait! or Building High-Performance Web Applications
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
 
Web Performance & Search Engines - A look beyond rankings
Web Performance & Search Engines - A look beyond rankingsWeb Performance & Search Engines - A look beyond rankings
Web Performance & Search Engines - A look beyond rankings
 
10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]
10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]
10 Things You're Not Doing [IBM Lotus Notes Domino Application Development]
 
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and BeyondWebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
 
New Browsers
New BrowsersNew Browsers
New Browsers
 
LinkedIn Platform at LeWeb 2010
LinkedIn Platform at LeWeb 2010LinkedIn Platform at LeWeb 2010
LinkedIn Platform at LeWeb 2010
 

Destaque

Packing Newsletter October 07
Packing Newsletter October 07Packing Newsletter October 07
Packing Newsletter October 07
frisard
 
Planejamento de Marketing
Planejamento de MarketingPlanejamento de Marketing
Planejamento de Marketing
Cristiane Thiel
 
S O N E T O[ B O B L A U R A]
S O N E T O[ B O B  L A U R A]S O N E T O[ B O B  L A U R A]
S O N E T O[ B O B L A U R A]
guest2c857d
 
Projekt Hardware - Speicher
Projekt Hardware - SpeicherProjekt Hardware - Speicher
Projekt Hardware - Speicher
C.Ronaldo_91
 
Apresentação Aquarius
Apresentação AquariusApresentação Aquarius
Apresentação Aquarius
Laura Baptista
 

Destaque (20)

Blues Music.It Does Not Get Any Better Than This
Blues Music.It Does Not Get Any Better Than ThisBlues Music.It Does Not Get Any Better Than This
Blues Music.It Does Not Get Any Better Than This
 
Accidentes
AccidentesAccidentes
Accidentes
 
Business Intelligence
Business IntelligenceBusiness Intelligence
Business Intelligence
 
Activos Intangibles
Activos IntangiblesActivos Intangibles
Activos Intangibles
 
Packing Newsletter October 07
Packing Newsletter October 07Packing Newsletter October 07
Packing Newsletter October 07
 
Planejamento de Marketing
Planejamento de MarketingPlanejamento de Marketing
Planejamento de Marketing
 
Plano de Marketing
Plano de MarketingPlano de Marketing
Plano de Marketing
 
S O N E T O[ B O B L A U R A]
S O N E T O[ B O B  L A U R A]S O N E T O[ B O B  L A U R A]
S O N E T O[ B O B L A U R A]
 
LIBRO DE LAS PREGUNTAS
LIBRO DE LAS PREGUNTASLIBRO DE LAS PREGUNTAS
LIBRO DE LAS PREGUNTAS
 
Tutorial Blog En Wordpress 2
Tutorial Blog En Wordpress 2Tutorial Blog En Wordpress 2
Tutorial Blog En Wordpress 2
 
Tutorial Blog En Wordpress 3
Tutorial Blog En Wordpress 3Tutorial Blog En Wordpress 3
Tutorial Blog En Wordpress 3
 
Tutorial Blog En Wordpress 1
Tutorial Blog En Wordpress 1Tutorial Blog En Wordpress 1
Tutorial Blog En Wordpress 1
 
CIPA Overview
CIPA OverviewCIPA Overview
CIPA Overview
 
Projekt Hardware - Speicher
Projekt Hardware - SpeicherProjekt Hardware - Speicher
Projekt Hardware - Speicher
 
Emprendimiento E Innovación Digital
Emprendimiento E Innovación DigitalEmprendimiento E Innovación Digital
Emprendimiento E Innovación Digital
 
Tutorial Blog En Wordpress 4
Tutorial Blog En Wordpress 4Tutorial Blog En Wordpress 4
Tutorial Blog En Wordpress 4
 
Nostalgicemails
NostalgicemailsNostalgicemails
Nostalgicemails
 
11 De Septiembre
11 De Septiembre11 De Septiembre
11 De Septiembre
 
Samenvatting In Beelden
Samenvatting In BeeldenSamenvatting In Beelden
Samenvatting In Beelden
 
Apresentação Aquarius
Apresentação AquariusApresentação Aquarius
Apresentação Aquarius
 

Semelhante a Grails and Dojo

GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009
marpierc
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
James Williams
 
What I brought back from Austin
What I brought back from AustinWhat I brought back from Austin
What I brought back from Austin
Lisa Adkins
 

Semelhante a Grails and Dojo (20)

GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009GTLAB Installation Tutorial for SciDAC 2009
GTLAB Installation Tutorial for SciDAC 2009
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
 
my test
my testmy test
my test
 
Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007Grails Introduction - IJTC 2007
Grails Introduction - IJTC 2007
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
Client-side JavaScript Vulnerabilities
Client-side JavaScript VulnerabilitiesClient-side JavaScript Vulnerabilities
Client-side JavaScript Vulnerabilities
 
Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM
Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM
Enterprise Google Gadgets Integrated with Alfresco - Open Source ECM
 
Ajax
AjaxAjax
Ajax
 
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET DevelopersAccelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
Accelerated Adoption: HTML5 and CSS3 for ASP.NET Developers
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
 
jQuery Presentation - Refresh Events
jQuery Presentation - Refresh EventsjQuery Presentation - Refresh Events
jQuery Presentation - Refresh Events
 
Eugene Andruszczenko: jQuery
Eugene Andruszczenko: jQueryEugene Andruszczenko: jQuery
Eugene Andruszczenko: jQuery
 
Intro on GWT & Google APIs (Vikram Rangnekar, COO of Socialwok.com)
Intro on GWT & Google APIs (Vikram Rangnekar, COO of Socialwok.com)Intro on GWT & Google APIs (Vikram Rangnekar, COO of Socialwok.com)
Intro on GWT & Google APIs (Vikram Rangnekar, COO of Socialwok.com)
 
What I brought back from Austin
What I brought back from AustinWhat I brought back from Austin
What I brought back from Austin
 
HTML5 Overview
HTML5 OverviewHTML5 Overview
HTML5 Overview
 
Real-World AJAX with ASP.NET
Real-World AJAX with ASP.NETReal-World AJAX with ASP.NET
Real-World AJAX with ASP.NET
 
&lt;img src="xss.com">
&lt;img src="xss.com">&lt;img src="xss.com">
&lt;img src="xss.com">
 
Fav
FavFav
Fav
 
Jsp
JspJsp
Jsp
 
Intro to jQuery
Intro to jQueryIntro to jQuery
Intro to jQuery
 

Mais de Sven Haiges

CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on Android
Sven Haiges
 

Mais de Sven Haiges (11)

NFC and Commerce combined
NFC and Commerce combinedNFC and Commerce combined
NFC and Commerce combined
 
End to End Realtime Communication using Mobiel Devices and the Web
End to End Realtime Communication using Mobiel Devices and the WebEnd to End Realtime Communication using Mobiel Devices and the Web
End to End Realtime Communication using Mobiel Devices and the Web
 
NFC Android Introduction
NFC Android IntroductionNFC Android Introduction
NFC Android Introduction
 
Gesture-controlled web-apps
Gesture-controlled web-appsGesture-controlled web-apps
Gesture-controlled web-apps
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on Android
 
NFC on Android - Near Field Communication
NFC on Android - Near Field CommunicationNFC on Android - Near Field Communication
NFC on Android - Near Field Communication
 
Android UI
Android UIAndroid UI
Android UI
 
Html5
Html5Html5
Html5
 
Grails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon ValleyGrails @ Java User Group Silicon Valley
Grails @ Java User Group Silicon Valley
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
Grails 0.3-SNAPSHOT Presentation WJAX 2006 EnglishGrails 0.3-SNAPSHOT Presentation WJAX 2006 English
Grails 0.3-SNAPSHOT Presentation WJAX 2006 English
 
Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006Grails 0.3-SNAPSHOT Presentation WJAX 2006
Grails 0.3-SNAPSHOT Presentation WJAX 2006
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

Grails and Dojo

  • 2.
  • 3.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 11.  
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17. remoteField list.gsp <table> <thead> <tr> ... </tr> </thead> <tbody id=&quot;tableContent&quot;> <g:each in=&quot;${deviceList}&quot; var=&quot;device&quot;> ... </g:each> </tbody> </table> _tableContent.gsp <g:each in=&quot;${deviceList}&quot; var=&quot;device&quot;> <tr> <td>${device.id}</td> ... </tr> </g:each>
  • 19.
  • 20.
  • 22.
  • 23.
  • 24. JSON is easy to read, too { &quot;identifier&quot;:&quot;id&quot;, &quot;items&quot;: [ { &quot;id&quot;:1, &quot;url&quot;:&quot;http://url1/rss&quot; }, { &quot;id&quot;:2, &quot;url&quot;:&quot;http://url2/rss&quot; }, { &quot;id&quot;:3, &quot;url&quot;:&quot;http://url3/rss&quot; }, { &quot;id&quot;:4, &quot;url&quot;:&quot;http://url4/rss&quot; } ] }
  • 25.
  • 26.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 36.
  • 37.
  • 38. THX Y IM/SKYPE hansamann