Vaadin 25.2: le principali novità della nuova versione
Vaadin continua l’evoluzione della serie 25 con Vaadin 25.2, una release particolarmente interessante per chi sviluppa applicazioni web enterprise in Java.
La versione stabile più recente della piattaforma è attualmente Vaadin 25.2.7, mentre la 25.3 è ancora indicata nella roadmap come prossima release. Vaadin 25 rappresenta ormai la versione consigliata per i nuovi progetti e porta con sé una base tecnologica decisamente moderna: Java 21+, Spring Boot 4, Spring Framework 7, Jakarta EE 11, React 19 e Node.js 24.
Con la 25.2, però, Vaadin non si limita ad aggiornare le dipendenze: introduce nuove API che permettono di utilizzare funzionalità native del browser direttamente da Java, migliora il modello reattivo basato sui Signals, aggiunge nuovi componenti e aumenta la sicurezza predefinita delle applicazioni.
API del browser direttamente da Java
Una delle novità più interessanti di Vaadin 25.2 riguarda l’accesso alle API native del browser.
Tradizionalmente, quando una applicazione Vaadin aveva bisogno di interagire con determinate funzionalità del browser, era spesso necessario ricorrere a JavaScript oppure a chiamate tramite executeJs().
Con Vaadin 25.2 diverse di queste funzionalità diventano accessibili direttamente dal codice Java server-side.
Tra le API disponibili troviamo geolocalizzazione, clipboard, modalità fullscreen, Screen Wake Lock, Page Visibility, Web Share e gestione dell’orientamento dello schermo.
Per esempio, copiare un testo negli appunti può diventare molto semplice:
Button copy = new Button("Copia");
Clipboard.onClick(copy)
.writeText("Hello, Vaadin!");
Non è quindi necessario scrivere JavaScript personalizzato per una funzionalità così comune.
Lo stesso principio vale per la geolocalizzazione. Vaadin permette di ottenere la posizione corrente del browser oppure di seguirne continuamente gli aggiornamenti tramite watchPosition().
Questo approccio rafforza ulteriormente uno dei principali punti di forza di Vaadin Flow: permettere allo sviluppatore Java di lavorare il più possibile all’interno dello stesso ecosistema senza dover continuamente passare da Java a JavaScript.
Signals sempre più centrali
I Signals, diventati production-ready con Vaadin 25.1, vengono ulteriormente integrati nel framework con la versione 25.2.
L’obiettivo è rendere più semplice la gestione dello stato reattivo dell’interfaccia.
Un componente può, ad esempio, aggiornare automaticamente proprietà come visibilità, abilitazione o valore quando cambia il Signal al quale è collegato.
Vaadin mette a disposizione API come:
bindVisible(...)
bindEnabled(...)
bindValue(...)
Il paradigma diventa interessante soprattutto nelle interfacce complesse, dove diversi componenti dipendono dallo stesso stato.
Anche strutture dati più articolate possono essere gestite utilizzando ListSignal e Signal.effect().
Un esempio molto semplice:
ListSignal<String> items = new ListSignal<>();
Grid<String> grid = new Grid<>();
Signal.effect(
grid,
() -> grid.setItems(items.getValues().toList())
);
Quando cambia il contenuto del Signal, l’interfaccia può quindi reagire automaticamente senza dover costruire manualmente tutta la logica di sincronizzazione.
Nuovi componenti pronti per la produzione
Vaadin 25.2 porta inoltre alla disponibilità generale diversi componenti precedentemente presenti come Preview.
Tra quelli più interessanti troviamo Slider, Badge, Master-Detail Layout e la nuova architettura modulare del componente Upload.
Slider dispone anche di implementazioni specifiche come IntegerSlider, DecimalSlider, IntegerRangeSlider e DecimalRangeSlider.
Badge permette invece di rappresentare facilmente stati e notifiche, compresi indicatori di successo, warning ed errore.
Il Master-Detail Layout è particolarmente utile nelle applicazioni gestionali: permette di realizzare interfacce nelle quali una lista principale e il relativo dettaglio vengono visualizzati fianco a fianco, adattando automaticamente il comportamento sugli schermi più piccoli.
Anche Upload diventa più modulare. Invece di utilizzare necessariamente un singolo componente monolitico, è possibile comporre l’interfaccia utilizzando elementi come UploadManager, UploadButton, UploadDropZone e UploadFileList.
Maggiore sicurezza di default
Vaadin 25.2 introduce anche modifiche importanti dal punto di vista della sicurezza.
Le URL utilizzate da componenti come Anchor, IFrame e Page.open() vengono ora validate automaticamente. Schemi potenzialmente pericolosi come javascript: vengono quindi rifiutati di default.
Anche la protezione contro il clickjacking viene rafforzata: Vaadin invia automaticamente l’header X-Frame-Options.
È stata inoltre migliorata la gestione di HTML proveniente da fonti non attendibili attraverso il supporto alle Safelist di jsoup.
Interessante anche la protezione relativa alla supply chain npm: per impostazione predefinita Vaadin evita di installare pacchetti npm pubblicati da meno di un giorno. L’obiettivo è lasciare un intervallo di tempo nel quale eventuali pacchetti compromessi possano essere identificati e rimossi prima di entrare automaticamente nelle build delle applicazioni.
AI sempre più integrata
L’intelligenza artificiale entra progressivamente anche nella piattaforma Vaadin.
Vaadin 25.2 introduce, ancora in Preview, GridAIController, ChartAIController e FormAIController.
L’idea è permettere agli utenti di interagire con parti dell’interfaccia attraverso il linguaggio naturale.
Con GridAIController e ChartAIController, per esempio, una descrizione testuale può essere utilizzata per generare una query SQL e configurare automaticamente una Grid o un grafico.
FormAIController punta invece alla compilazione automatica dei form partendo da testo, documenti o immagini.
Si tratta ancora di funzionalità sperimentali e le relative API potrebbero cambiare, ma mostrano chiaramente la direzione che Vaadin sta seguendo.
Test di carico partendo dai test esistenti
Un’altra novità interessante riguarda i test.
Vaadin 25.2 permette di trasformare test end-to-end realizzati con TestBench o Playwright in test di carico basati su Grafana k6.
Il processo registra il traffico HTTP prodotto dal test, genera un file HAR e successivamente lo converte in uno script k6 tenendo conto di aspetti specifici di Vaadin come session ID, token CSRF, Push ID e UI ID.
In questo modo gli stessi scenari utilizzati per verificare funzionalmente l’applicazione possono diventare una base per effettuare test con numerosi utenti virtuali. Questa funzionalità è attualmente sperimentale e la parte di load testing basata su TestBench richiede una sottoscrizione commerciale Vaadin.
Una piattaforma sempre più Java-oriented
Vaadin 25.2 conferma soprattutto la direzione intrapresa dalla versione 25: ridurre le particolarità specifiche del framework e avvicinarsi maggiormente agli standard dell’ecosistema Java e del Web moderno.
L’accesso alle funzionalità del browser direttamente da Java è probabilmente una delle novità più significative per chi utilizza Vaadin Flow. A questo si aggiungono Signals, una maggiore sicurezza predefinita, nuovi componenti e una progressiva integrazione dell’intelligenza artificiale.
Per applicazioni enterprise nelle quali gran parte della business logic è già sviluppata in Java, Vaadin continua quindi a proporre un approccio particolare ma interessante: costruire applicazioni web moderne mantenendo Java come linguaggio principale non soltanto nel backend, ma anche nella gestione dell’interfaccia utente.
Con Vaadin 25 questa filosofia sembra diventare ancora più evidente.