Vaadin

היסטוריה

הפלטפורמה החלה את דרכה בשנת 2001 כחלק מפיתוח של חברה פינית בשם IT Mill שבאותה תקופה ייצרה אפליקציות ללקוחות. על מנת לפתח את היישומים באופן יעיל יותר, IT Mill פיתחה החברה פלטפורמה שתסייע בבניית האפליקציות. בשלב הראשון בנתה החברה את המוצר לשימושה הפנימי.
בשנת 2002 החליטה IT Mill על שחרור הגרסה הראשונית של הפלטפורמה ברישיון קוד פתוח בשם "Millstone 3".
עד שנת 2005 המשיכה IT Mill לשחרר גרסאות של "Millstone 3", בשלב זה פיתוח הפלטפורמה התקדם ונוספה עליו שכבה של טכנולוגיית AJAX. בעקבות כך הוחלט על שכתוב צד לקוח וצד שרת. שינוי זה סייע בכך שהשינויים בגרסאות הבאות היו שוליים.
שנת 2006 הביאה שינוי גדול נוסף בצד לקוח על מנת להתאימו לתכונות חדשות של AJAX והגרסה שוחררה בשם "IT Mill Toolkit 4". השינוי כלל הוספה של JavaScript ובעקבות כך היה קשה להמשיך לתחזק ולהרחיב את הגרסה הזו. מסיבה זו בשנת 2007 הוחלט להוריד את ה-JavaScript ולהחליף אותו ב-GWT. שינוי זה הוביל לכתיבתו מחדש של צד לקוח וגרסה חדשה יצאה בשם "IT Mill Toolkit 5".
בשנת 2009 IT Mill שחררה גרסה "Toolkit 6" ושמה שונה ל- Vaadin.
בשנת 2010 המותג Vaddin היה מוכר בציבור יותר משם החברה (IT Mill) מסיבה זו החליטה החברה לשנות את שמה ולאמץ את שם החברה.
בשנת 2013 יצאה גרסה 7. בגרסה זו הכניסו את GWT כחלק מהמערכת. בנוסף, הוסיפו תכונות חדשות ושיפרו את המערכת בהתאם למשובים מהקהילה של Vaadin.
בשנת 2017 שוחררה מגרסה 8. השינויים העיקריים נבעו בעיקר משיפורים של JAVA גרסה 8. הגרסה עברה התאמה מלאה ל-JAVA 8 ושיפור של ה-API.
בשנת 2018 שוחררה גרסה 10 (גרסה 9 לא הייתה קיימת). היה זה השינוי המשמעותי ביותר בהיסטוריה של Vaadin. השינוי כלל שכתוב של הרכיבים ושכבת התקשורת.
בשנת 2019 שוחררה גרסה 13 (בתא) הכוללת שיפורים קטנים ותיקון תקלות.

רכיבי Vaadin

הרכיבים של Vaadin הם קבוצה מקיפה של רכיבי אינטרנט המיועדים למפתחי אתרי אינטרנט. בעזרת הרכיבים אלו ניתן לבנות בקלות יחסית אתר אינטרנט.

שימוש בסיסי

רכיבי Vaadin מותקנים בדרך כלל עם npm או bower. לדוגמה, הפקודה הבאה מתקינה את vaadin-button : 
bower install vaadin/vaadin-button
 לאחר ההתקנה, הרכיב יכול לשמש בדף אינטרנט כדלקמן: 
<html><head>
 <link rel="import" href="bower_components/vaadin-button/vaadin-button.html" /></head><body>
 <vaadin-button onclick='alert("Hello, World")'>Click me</vaadin-button></body></html>
 להלן צילום מסך של הדף הקודם:

שימוש בסיסי

להלן דוגמה בסיסית של שימוש ב- Vaadin Flow: 
@Route("hello-world")public class MainView extends VerticalLayout {

 public MainView() {
 TextField textField = new TextField("Enter your name");

 Button button = new Button("Click me", event ->
 add(new Span("Hello, " + textField.getValue())));

 add(textField, button);
 }}
 להלן צילום מסך של היישום הקודם:

מימוש ממשק המשתמש רק עם JAVA

Vaadin Flow מאפשרת שימוש במרכיבי ממשק קיימים וביצוע רכיבים חדשים באמצעות קוד JAVA הפועל בצד שרת. ניתן ליצור ולשנות את DOM מהצד שרת. הבנאי של קטע הקוד הבא מראה כיצד ליצור אלמנט div חדש, להגדיר id, ולהוסיף מאזין לאירוע קליק: 
@Route("")public class MainView extends Div {
 public MainView() {
 Div div = new Div();
 div.setText("Click me");
 div.getElement().setAttribute("id", "main");
 div.getElement().addEventListener("click", (DomEventListener) event ->
 add(new Span("Hello, World")));
 add(div);
 }}

שילוב רכיבי אינטרנט

שילוב רכיבי אינטרנט מסופק באמצעות ההערות @Import ו- @Tag @Import . קטע הקוד הבא מראה כיצד לעטוף רכיב אינטרנט קיים ברכיב Java בצד השרת: 
@Tag("juicy-ace-editor")@HtmlImport("bower_components/juicy-ace-editor/juicy-ace-editor.html")public class JuicyAceEditor extends Div {

 public void setMode(String mode) {
 getElement().setAttribute("mode", mode);
 }}

Router

Router הוא מושג ליבה ב-Vaadin Flow המאפשר ניווט באמצעות כתובות אתרים. ה-Router מאפשר חיבור של כתובות אתרים לרכיבי ממשק משתמש. הוא מבוסס על ממשק API HTML5 History המאפשר למשתמשי הקצה לנווט בין הדפים תוך שמירה על מצב הדף. קטע הקוד הבא מראה כיצד להשתמש בהערות @Route כדי להציג את הרכיב @Route כאשר משתמש הקצה מבקש כתובת אתר כגון http://yourdomain.com /hello/world : 
@Route("hello/world")public class HelloWorldComponent extends Div {
 public HelloWorldComponent() {
 setText("Hello, World!");
 }}

מיזוג נתונים

מיזוג הנתונים נעשה דרך מחלקת Binder . זה מאפשר לסנכרן את הערכים בשדות קלט עם מודלים נתונים בצד השרת. קטע הקוד הבא מראה כיצד לקשר את name שדה Java מסוג Person לערך ברכיב TextField : 
TextField nameField = new TextField();Binder<Person> binder = new Binder<>();binder.bind(nameField, Person::getName, Person::setName);

תבניות HTML

Vaadin Flow מאפשרת הגדרה של תבניות HTML עם תקשורת אוטומטית של שרת לקוח וחיבור נתונים (בעת שימוש בתבניות מבוססות פולימר ). להלן דוגמה לתבנית מבוססת פולימרים: 
<link rel="import" href="../bower_components/polymer/polymer-element.html"><link rel="import" href="../bower_components/vaadin-text-field/vaadin-text-field.html"><dom-module id="hello-world">
 <template>
 <vaadin-text-field label="Your name" value="{{name}}"></vaadin-text-field>
 <button on-click="greet">Click me</button>
 <div id="greeting">[[greeting]]</div>
 </template>
 <script>
 class HelloWorld extends Polymer.Element {
 static get is() {
 return 'hello-world'
 }
 }
 customElements.define(HelloWorld.is, HelloWorld);
 </script></dom-module>
 קטע הקוד הבא מראה כיצד לחבר את התבנית הקודמת למרכיב Java בצד השרת: 
@Tag("hello-world")@HtmlImport("src/hello-world.html")public class HelloWorld extends PolymerTemplate<HelloWorld.HelloWorldModel> {

 public interface HelloWorldModel extends TemplateModel {
 String getName();
 void setGreeting(String greeting);
 }

 @EventHandler
 private void greet() {
 getModel().setGreeting("Hello, " + getModel().getName());
 }}

התאמה אישית של מראה ותחושת המשתמש

התאמה אישית של המראה ותחושת המשתמש ניתן לעשות עם CSS, סגנונות מותאמים אישית של HTML, או על ידי תצורות ערכות נושא מוכנות.

שילוב עבודה עם Spring Framework

Vaadin Flow כולל אינטגרציה עם Spring Framework 5 ו-Spring Boot 2.