Odelia>Technologiesbeta

Présenter vos données avec Exhibit et Grails

| | | | |

Proposé par SIMILE, Exhibit 2.0 est un framework web développé en JavaScript et destiné à présenter vos données de manière dynamique.
Avec un minimum de configuration dans une page web, que sont la définition d'une source de données JSON (pour JavaScript Object Notation), d'une ou de plusieurs vues, et le choix des données à présenter avec des éventuels tris ou regroupements, le framework Exhibit gère complètement la présentation des données au niveau du navigateur.

Générer les données JSON avec Grails

Les données à présenter doivent être au format JSON et sont obtenues dans une page web au moyen d'un élément HTML link comme ceci :

<link href="nobelists.js" type="application/json" rel="exhibit/data" />

Dans l'exemple ci-dessus, c'est un fichier .js contenant les données au format JSON qui est référencé. Or, Grails offrant un très bon support du format JSON, il est aisé de générer les données requises par la présentation web, comme résultat d'une action de contrôleur.
Grails permet notamment de convertir facilement des objets métiers au format JSON comme le mentionne ici Dan Stieglitz :

render monObjetMetier as JSON

ou bien

render MonObjetMetier.list( params ) as JSON


Dans la vue constituée par la page .gsp on écrira le lien :

<link href="${createLink(controller: 'exhibit'  action: 'data')}" rel="exhibit/data"/>

qui permettra la récupération des données au travers de l'appel à l'action data du contrôleur ExhibitController.

Retrouvez sur notre nouveau site web GrailsWorks cet exemple d'utilisation du projet Exhibit avec Grails, qui consiste à présenter au travers de différentes vues, les photos les plus récentes mises en ligne sur le site Flickr.
Parmi les vues proposées nous retrouvons la vue Ligne de temps grâce à laquelle nous avons un moyen visuelle de situer les dates des prises de vue des photos.

Ce qui impressionne dans le projet Exhibit, c'est que sans une ligne de code, on peut aisément réaliser une présentation web comprenant des possibilités de tris, de regroupement, et même de recherche !

Techniquement, les données sont récupérées au travers de l'API XML-RPC de Flickr (dans le code ci-dessous on a masqué notre clé d'API Flickr par le texte votre_cle_api_ici), afin de constituer une Map Groovy, avant d'êtres rendues au format JSON.

Voici le code du contrôleur :

import grails.converters.JSON
import groovy.net.xmlrpc.XMLRPCServerProxy


class ExhibitController {

    def index = { }
   
    def data = {
        def flickr = new XMLRPCServerProxy("http://api.flickr.com/services/xmlrpc/")
       
        def photos = flickr.'flickr.photos.getRecent'(api_key: 'votre_cle_api_ici', extras: 'owner_name,date_taken,license')
        photos = new XmlSlurper().parseText(photos)

        def items = []
        def licenses = ['All Rights Reserved', 'Attribution-NonCommercial-ShareAlike',
                        'Attribution-NonCommercial', 'Attribution-NonCommercial-NoDerivs',
                        'Attribution', 'Attribution-ShareAlike', 'Attribution-NoDerivs']
        photos.photo.each {         
            def link = "http://farm${it.@farm}.static.flickr.com/${it.@server}/${it.@id}_${it.@secret}"
            items << [type: 'Photo', label: "${it.@title}", url: link + '.jpg', url_t: link + '_t.jpg',
                      ownername: "${it.@ownername}", datetaken: "${it.@datetaken}",
                      license: licenses[Integer.parseInt("${it.@license}", 10)]]
        }       
       
        def json = [
            types: [Photo: [pluralLabel: 'Photos']],
            items: items
        ]

        render json as JSON
    }
   
}

balises dans Langages et systèmes

AJAX cajo Camel DSL Grails Groovy Java JBI prefuse RSS ServiceMix SOA