SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von Sven Haiges

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

Mehr von 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
 

Kürzlich hochgeladen

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

Kürzlich hochgeladen (20)

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...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
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...
 
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)
 
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
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 

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