SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
B U I L D I N G M O D E R N
W E B A P P S I N J A V A
@ M A R C U S H E L L B E R G
@ M A R C U S H E L L B E R G
A G E N D A
⚡ Quick intro to Vaadin 10
🙌 Hands-on programming
5
V A A D I N 1 0
F O C U S O N
P R O D U C T I V I T Y
G R E AT U X T H R O U G H
G R E AT D X
J A V A ♥ W E B
S TA N D A R D S - B A S E D
W E B C O M P O N E N T S
<vaadin-combo-box>

</vaadin-combo-box>
J A V A F R A M E W O R K
new ComboBox();
VAADIN 8
U I C O M P O N E N T S
J A V A A P I
VAADIN 10
V A A D I N
C O M P O N E N T S
V A A D I N
F L O W
O P E N S O U R C E
Apache 2.0
C O R E C O N C E P T S
new Span("I'm a <span>")
new Button("I'm a button")
new DatePicker("Select a date")
new ComboBox <>("Select an option")
new VerticalLayout(
new Button("I'm a button"),
new DatePicker("Select a date"),
new ComboBox <>("Select an option"),
new Span("I'm a <span>")
);
var nameField = new TextField("Name");
var button = new Button("Click me");
button.addClickListener(click -> {
add(new Span(nameField.getValue()));
});
var nameField = new TextField("Name");
var button = new Button("Click me");
button.addClickListener(click -> {
add(new Span(nameField.getValue()));
});
@Route("demo")
public class Demo extends VerticalLayout {
...
}
// Parent layout for all views under /users
@RoutePrefix("users")
class UsersView extends Div
implements RouterLayout {
// ... implementation ...
}
// matches /users/edit/123
@Route(value = "edit", layout = UsersView.class)
class UserEditorView extends Div
implements HasUrlParameter<Integer> {
@Override
public void setParameter(BeforeEvent event,
Integer userId) {
// ... fetch user ...
}
}
public class SignupForm extends VerticalLayout {
static class Person {
@NotEmpty private String name;
@Email @NotEmpty private String email;
}
private TextField name = new TextField("Name");
private TextField email = new TextField("Email");
private Person person = new Person();
public SignupForm() {
Binder<Person> binder
= new BeanValidationBinder <>(Person.class);
binder.bindInstanceFields(this);
binder.setBean(person);
Button save = new Button("Save");
add(name, email, save);
}
}
public class SignupForm extends VerticalLayout {
static class Person {
@NotEmpty private String name;
@Email @NotEmpty private String email;
}
private TextField name = new TextField("Name");
private TextField email = new TextField("Email");
private Person person = new Person();
public SignupForm() {
Binder<Person> binder
= new BeanValidationBinder <>(Person.class);
binder.bindInstanceFields(this);
binder.setBean(person);
Button save = new Button("Save");
add(name, email, save);
}
}
public Demo(PersonService service) {
Grid<Person> grid = new Grid <>();
grid.setItems(service.getPeople());
grid.addColumn(Person ::getName)
.setHeader("Name");
grid.addColumn(Person ::getAge)
.setHeader("Age");
}
public Demo(PersonService service) {
Grid<Person> grid = new Grid <>();
grid.setItems(service.getPeople());
grid.addColumn(Person ::getName)
.setHeader("Name");
grid.addColumn(Person ::getAge)
.setHeader("Age");
}
🔥 D E M O T I M E 🔥
github.com/marcushellberg/vaadin-chat
TextField name = new TextField();
Button button = new Button("Greet");
layout.addComponents(name, button);
button.addClickListener(click -> {
Notification.show("Hi, " + name.getValue());
});
Initial HTML
CSS
JavaScript
{name: {value: 'Marcus'},
button: {event: 'clicked'}}
261 bytes

TextField name = new TextField();
Button button = new Button("Greet");
layout.add(name, button);
button.addClickListener(click -> {
Notification.show("Hi, " + name.getValue());
});
TextField name = new TextField();
Button button = new Button("Greet");
layout.add(name, button);
button.addClickListener(click -> {
Notification.show("Hi, " + name.getValue());
});
{name: {value: 'Marcus'},
button: {event: 'clicked'}}
261 bytes

{updates: [
{notification: 'Hi, Marcus'}
]}
267 bytes

F E AT U R E S
A U T O M AT E D C O M M U N I C AT I O N
public class MainView extends Div {
...
}
@Route("")
A U T O M AT E D C O M M U N I C AT I O N
public class MainView extends Div {
...
}
@Push
@Route("")
A U T O M AT E D C O M M U N I C AT I O N
public class MainView extends Div {
...
}
@Push
ui.access(() -> Notification.show("Alert!"));
@Route("")
new VerticalLayout(
new TextField("Text Field"),
new Button("Button")
)
<vaadin-vertical-layout>
<vaadin-text-field label="Text Field">
</vaadin-text-field>
<vaadin-button>Button </vaadin-button>
</vaadin-vertical-layout>
A C C E S S I B L E
S T R O N G S E C U R I T Y
S TA B L E A P I
T H E J V M♥
E X T E N D A B L E
$
$
$
2 0 1 8 2 0 2 12 0 1 9 2 0 2 0 2 0 2 2 2 0 2 52 0 2 3 2 0 2 4 • • •2 0 2 6 2 0 2 7
LT S- V10
LTS-V23
LT S-V3 1
LT S-V3 9
V1 2
V1 1
V1 3
V14
LTS-V17
V15
V16
+ 5 year support (bug fixes)
F A S T R E L E A S E C Y C L E + S T A B I L I T Y
R O A D M A P
- Better Progressive Web App support
- More components
- More starters
Always happy to help you.
vaadin.com/start
github.com/vaadin
gitter.im/vaadin
T H A N K S
@ M A R C U S H E L L B E R G

Weitere ähnliche Inhalte

Ähnlich wie Building web apps with vaadin 10

10 awt event model
10 awt event model10 awt event model
10 awt event model
Bayarkhuu
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
Jussi Pohjolainen
 
Yolygambas
YolygambasYolygambas
Yolygambas
rosyp
 
Android Studio (Java)The SimplePaint app (full code given below).docx
Android Studio (Java)The SimplePaint app (full code given below).docxAndroid Studio (Java)The SimplePaint app (full code given below).docx
Android Studio (Java)The SimplePaint app (full code given below).docx
amrit47
 

Ähnlich wie Building web apps with vaadin 10 (20)

Day 5
Day 5Day 5
Day 5
 
Android Animation (in tamil)
Android Animation (in tamil)Android Animation (in tamil)
Android Animation (in tamil)
 
Project fast food automaton
Project fast food automatonProject fast food automaton
Project fast food automaton
 
10 awt event model
10 awt event model10 awt event model
10 awt event model
 
SenchaCon 2016: Keynote Presentation - Art Landro, Gautam Agrawal, Mark Brocato
SenchaCon 2016: Keynote Presentation - Art Landro, Gautam Agrawal, Mark BrocatoSenchaCon 2016: Keynote Presentation - Art Landro, Gautam Agrawal, Mark Brocato
SenchaCon 2016: Keynote Presentation - Art Landro, Gautam Agrawal, Mark Brocato
 
Voices That Matter: JavaScript Events
Voices That Matter: JavaScript EventsVoices That Matter: JavaScript Events
Voices That Matter: JavaScript Events
 
STYLISH FLOOR
STYLISH FLOORSTYLISH FLOOR
STYLISH FLOOR
 
Baitap tkw
Baitap tkwBaitap tkw
Baitap tkw
 
Testing TYPO3 Applications
Testing TYPO3 ApplicationsTesting TYPO3 Applications
Testing TYPO3 Applications
 
안드로이드 세미나 2
안드로이드 세미나 2안드로이드 세미나 2
안드로이드 세미나 2
 
안드로이드 세미나 2
안드로이드 세미나 2안드로이드 세미나 2
안드로이드 세미나 2
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
 
Yolygambas
YolygambasYolygambas
Yolygambas
 
Yolygambas
YolygambasYolygambas
Yolygambas
 
Yolygambas
YolygambasYolygambas
Yolygambas
 
Vaadin 7
Vaadin 7Vaadin 7
Vaadin 7
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
Vaadin 7 by Joonas Lehtinen
Vaadin 7 by Joonas LehtinenVaadin 7 by Joonas Lehtinen
Vaadin 7 by Joonas Lehtinen
 
Android Event and IntentAndroid Event and Intent
Android Event and IntentAndroid Event and IntentAndroid Event and IntentAndroid Event and Intent
Android Event and IntentAndroid Event and Intent
 
Android Studio (Java)The SimplePaint app (full code given below).docx
Android Studio (Java)The SimplePaint app (full code given below).docxAndroid Studio (Java)The SimplePaint app (full code given below).docx
Android Studio (Java)The SimplePaint app (full code given below).docx
 

Mehr von Marcus Hellberg

Mehr von Marcus Hellberg (9)

Building performant web apps
Building performant web appsBuilding performant web apps
Building performant web apps
 
Going web native - Feb 2018
Going web native - Feb 2018Going web native - Feb 2018
Going web native - Feb 2018
 
Going web native
Going web nativeGoing web native
Going web native
 
Going web native
Going web nativeGoing web native
Going web native
 
Demystifying progressive web apps
Demystifying progressive web appsDemystifying progressive web apps
Demystifying progressive web apps
 
Progressive web apps with polymer
Progressive web apps with polymerProgressive web apps with polymer
Progressive web apps with polymer
 
Booting up with polymer
Booting up with polymerBooting up with polymer
Booting up with polymer
 
Booting up with polymer
Booting up with polymerBooting up with polymer
Booting up with polymer
 
Vaadin NYC Meetup
Vaadin NYC MeetupVaadin NYC Meetup
Vaadin NYC Meetup
 

Kürzlich hochgeladen

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 

Kürzlich hochgeladen (20)

MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 

Building web apps with vaadin 10

  • 1. B U I L D I N G M O D E R N W E B A P P S I N J A V A @ M A R C U S H E L L B E R G
  • 2. @ M A R C U S H E L L B E R G
  • 3. A G E N D A ⚡ Quick intro to Vaadin 10 🙌 Hands-on programming
  • 4. 5 V A A D I N 1 0
  • 5. F O C U S O N P R O D U C T I V I T Y
  • 6. G R E AT U X T H R O U G H G R E AT D X
  • 7. J A V A ♥ W E B
  • 8.
  • 9. S TA N D A R D S - B A S E D W E B C O M P O N E N T S <vaadin-combo-box>
 </vaadin-combo-box>
  • 10. J A V A F R A M E W O R K new ComboBox();
  • 11. VAADIN 8 U I C O M P O N E N T S J A V A A P I VAADIN 10 V A A D I N C O M P O N E N T S V A A D I N F L O W
  • 12. O P E N S O U R C E Apache 2.0
  • 13. C O R E C O N C E P T S
  • 14. new Span("I'm a <span>") new Button("I'm a button") new DatePicker("Select a date") new ComboBox <>("Select an option")
  • 15. new VerticalLayout( new Button("I'm a button"), new DatePicker("Select a date"), new ComboBox <>("Select an option"), new Span("I'm a <span>") );
  • 16. var nameField = new TextField("Name"); var button = new Button("Click me"); button.addClickListener(click -> { add(new Span(nameField.getValue())); });
  • 17. var nameField = new TextField("Name"); var button = new Button("Click me"); button.addClickListener(click -> { add(new Span(nameField.getValue())); });
  • 18. @Route("demo") public class Demo extends VerticalLayout { ... }
  • 19. // Parent layout for all views under /users @RoutePrefix("users") class UsersView extends Div implements RouterLayout { // ... implementation ... } // matches /users/edit/123 @Route(value = "edit", layout = UsersView.class) class UserEditorView extends Div implements HasUrlParameter<Integer> { @Override public void setParameter(BeforeEvent event, Integer userId) { // ... fetch user ... } }
  • 20. public class SignupForm extends VerticalLayout { static class Person { @NotEmpty private String name; @Email @NotEmpty private String email; } private TextField name = new TextField("Name"); private TextField email = new TextField("Email"); private Person person = new Person(); public SignupForm() { Binder<Person> binder = new BeanValidationBinder <>(Person.class); binder.bindInstanceFields(this); binder.setBean(person); Button save = new Button("Save"); add(name, email, save); } }
  • 21. public class SignupForm extends VerticalLayout { static class Person { @NotEmpty private String name; @Email @NotEmpty private String email; } private TextField name = new TextField("Name"); private TextField email = new TextField("Email"); private Person person = new Person(); public SignupForm() { Binder<Person> binder = new BeanValidationBinder <>(Person.class); binder.bindInstanceFields(this); binder.setBean(person); Button save = new Button("Save"); add(name, email, save); } }
  • 22. public Demo(PersonService service) { Grid<Person> grid = new Grid <>(); grid.setItems(service.getPeople()); grid.addColumn(Person ::getName) .setHeader("Name"); grid.addColumn(Person ::getAge) .setHeader("Age"); }
  • 23. public Demo(PersonService service) { Grid<Person> grid = new Grid <>(); grid.setItems(service.getPeople()); grid.addColumn(Person ::getName) .setHeader("Name"); grid.addColumn(Person ::getAge) .setHeader("Age"); }
  • 24. 🔥 D E M O T I M E 🔥
  • 25.
  • 26.
  • 28. TextField name = new TextField(); Button button = new Button("Greet"); layout.addComponents(name, button); button.addClickListener(click -> { Notification.show("Hi, " + name.getValue()); });
  • 30.
  • 31.
  • 32. {name: {value: 'Marcus'}, button: {event: 'clicked'}} 261 bytes

  • 33. TextField name = new TextField(); Button button = new Button("Greet"); layout.add(name, button); button.addClickListener(click -> { Notification.show("Hi, " + name.getValue()); });
  • 34. TextField name = new TextField(); Button button = new Button("Greet"); layout.add(name, button); button.addClickListener(click -> { Notification.show("Hi, " + name.getValue()); });
  • 35.
  • 36. {name: {value: 'Marcus'}, button: {event: 'clicked'}} 261 bytes
 {updates: [ {notification: 'Hi, Marcus'} ]} 267 bytes

  • 37. F E AT U R E S
  • 38. A U T O M AT E D C O M M U N I C AT I O N public class MainView extends Div { ... } @Route("")
  • 39. A U T O M AT E D C O M M U N I C AT I O N public class MainView extends Div { ... } @Push @Route("")
  • 40. A U T O M AT E D C O M M U N I C AT I O N public class MainView extends Div { ... } @Push ui.access(() -> Notification.show("Alert!")); @Route("")
  • 41. new VerticalLayout( new TextField("Text Field"), new Button("Button") ) <vaadin-vertical-layout> <vaadin-text-field label="Text Field"> </vaadin-text-field> <vaadin-button>Button </vaadin-button> </vaadin-vertical-layout>
  • 42.
  • 43. A C C E S S I B L E
  • 44. S T R O N G S E C U R I T Y
  • 45. S TA B L E A P I
  • 46. T H E J V M♥
  • 47.
  • 48. E X T E N D A B L E
  • 49.
  • 50. $
  • 51. $
  • 52. $
  • 53. 2 0 1 8 2 0 2 12 0 1 9 2 0 2 0 2 0 2 2 2 0 2 52 0 2 3 2 0 2 4 • • •2 0 2 6 2 0 2 7 LT S- V10 LTS-V23 LT S-V3 1 LT S-V3 9 V1 2 V1 1 V1 3 V14 LTS-V17 V15 V16 + 5 year support (bug fixes) F A S T R E L E A S E C Y C L E + S T A B I L I T Y
  • 54. R O A D M A P - Better Progressive Web App support - More components - More starters
  • 55.
  • 56.
  • 57.
  • 58. Always happy to help you.
  • 60. T H A N K S @ M A R C U S H E L L B E R G