Grails scaffolding

Spread the love

Questo articolo parla dello scaffolding di Grails, ossia della funzionalità di generare le pagine web standard in base alle tabelle del database. In particolare affrontiamo gli aspetti della generazione dello scaffold e dell’ordine di comparsa dei campi della tabella nella form HTML. La versione di Grails di cui parlo non è nuovissima, ma è quella su cui sto lavorando su comissione.

A TRUE scaffold
Le impalcature servono anche nel software 😉

Cos’è uno scaffold

Lo scaffold è l’impalcatura, cioè una rappresentazione grezza, anche se visavamente decorosa, delle tabelle DBMS come form HTML, che viene generata automaticamente dal framework, assieme alle implementazioni HTTP dei verbi CRUD che definiscono le operazioni su queste tabelle.

Per chi come me ha iniziato a scrivere applicazioni web nel 2000 si ricorderà che si doveva fare tutto a mano: mappare i campi della tabella in opportuni controlli (HTML), scrivere il controllo di omogeneità lato server e lato client (javascript/jQuery) . Ad esempio: range di valori, correttezza dell’input, ecc. E poi implementare le operazioni CRUD attraverso la compilazione di comandi SQL parametrici.

Dopo un po’ ci si è resi conto che questo lavoro era anche terribilmente noioso perché meccanico e ripetitivo, per cui presto si è messo a punto lo strumento dello scaffolding che automatizzava questa parte di lavoro, producendo automaticamente il codice nel linguaggio dell’application server e la parte grafica in HTML/CSS a partire dalla definizione in DDL della tabella DBMS per la realizzazione delle 4 operazioni.

Scaffolding con Grails 1: static vs dynamic

Lo scaffolding con Grails è possibile in due modi.

Dynamic scaffolding.

Il primo veloce ed economico è lo scaffolding dinamico che significa che gli HTML delle pagine che realizzano le operazioni vengono generati al volo dal framework coem anche le funzionalità CRUD del controller e viene tenuto tutto in memoria RAM dell’Application server. È sufficente aggiungere la variabile static scaffolding inizializzata a true nella dichiarazione del controller:

package myapp

class CapitoloController {
    static scaffold = true

//    def index() {
//        render "Elenco dei capitoli"
//    }

}

Come alternativa si può anche inizializzare la variabile scaffold con il nome del dominio (tabella) che si vuole implementare.

Con questa modalità però non ho nessuna azione che venga cablata nel controller, né la produzione di alcuna vista. Se arresto il server perdo tutto.

È un buon punto di partenza ma non offre alcuna flessibilità.

Static scaffolding.

Lo scaffolding statico invece produce codice (controller / view) che poi può essere personalizzato.

In IDE del tipo Groovy/Grails toolsuite esisteva un comando disponibile a menu che produceva lo scaffold per il controller (quindi le azioni standard) e per le viste (le pagine html standard per ogni verbo). Venegoo generati anche i codici Groovy per tutti questi elementi.

Io però uso IntelliJ IDEA di JetBrains che non ha questo comando. Tuttavia è solo un lack della GUI perché da linea di comando si può fare tranquillamente:

$ grails generate-controller rewards.OrderItem

ad esempio genererà il codice per il Controller con i metodi standard index(), show(), creste(), save(), update(), delete(), notFound() e inoltre produrrà una cartella sotto views con il nome del dominio e le viste standard: _form.gsp, create.gsp, edit.gsp, index.gsp e show.gsp.

Grails Scaffolding #2: decidere l’ordine di apparizione dei campi della form HTML

Parte dell’utilizzo dei database nelle applicazioni web è rivolto alla posssibilità di fornire una rappresentazione grafica della tabelle db (assieme alle relazioni) come moduli (form) html. Infatti ciò che si fa è mappare ogni record in una maschera (form) con controlli (input) che ne riportano i valori.

Se si usa la funzionalità di scaffolding di Grails per costtuire le views (le schermate), è possibile decidere in quale ordine debbano essere visualizzati i campi di una form CRUD per la gestione di una tabella DBMS (ovvero di un domain Grails).

Ovviamente se non si usa lo scaffolidng è tutto a carico del progettista, ma è anche possibile dire a Grails come generare gli scaffold.

Nella dichiarazione del domain, nella dichiarazione dei constraints, scriveremo i campi nell’ordine in cui vogliamo che compaiano:

package rewards

class Customer {
    String firstName
    String lastName
    Long phone
    String email
    Integer totalPoints
    static hasMany = [awards: Award, orders: OnlineOrder]

    static constraints = {
        firstName()
        lastName()
        email()
        phone()
        totalPoints()
    }

Nelle dichiarazioni delle variabili, l’ordine non è importante (a questo riguardo). Per quanto riguarda l’ordine nel quale comparranno nella form, è la varibile static costraints a guidare.

Il risultato è rappresentato in figura 1

Come ordinare i campi della form usando lo scaffolding Grails
Oridine dei campi della form

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.