Vaadin7

123
Vaadin 7 Joonas Lehtinen Founder / Vaadin @joonaslehtinen

description

My Vaadin 7 presentation at Confess

Transcript of Vaadin7

Page 1: Vaadin7

Vaadin 7Joonas LehtinenFounder / Vaadin@joonaslehtinen

Page 2: Vaadin7

Intro toVaadin

new Label(“Hello world”)

Page 3: Vaadin7

New in

7

Page 4: Vaadin7

Gettingstarted

QA

Page 5: Vaadin7
Page 6: Vaadin7

User interface framework for rich

web applications

Page 7: Vaadin7

htmljava

Page 8: Vaadin7

Why on earth?

Page 9: Vaadin7
Page 10: Vaadin7

expectations

Page 11: Vaadin7

reality

Page 12: Vaadin7

businessconsumer

“million” users “500” users

>>100,000! / view 5,000! / view

10 views1!/user

50 views500!/user

Page 13: Vaadin7

ChallengeHow to build consumer

grade UX with business system budget

Page 14: Vaadin7

How?

Page 15: Vaadin7

123Key Ideas

Page 16: Vaadin7

1RichComponents

Page 17: Vaadin7

User IntefaceData Source

Theme

Page 23: Vaadin7
Page 24: Vaadin7
Page 25: Vaadin7
Page 26: Vaadin7
Page 27: Vaadin7
Page 28: Vaadin7

User IntefaceData Source

Theme

Page 33: Vaadin7

User IntefaceData Source

Theme

Page 34: Vaadin7
Page 35: Vaadin7

InMemory, Bean, Method, Collection, JDBC, JPA, Hibernate, TextFile, FileSystem, Properties, EclipseLink, Lucene, Mockups, GAE, ...

Page 36: Vaadin7

2Server + Client

Page 37: Vaadin7

Web application layers

JavaScriptJava toJavaScript

Webserver

Backendserver

required optional optionalrequired

RPC

optional

Vaa

din

required optionalrequired

GW

T

requiredrequiredJS

requiredrequired

required required

Page 38: Vaadin7

How does it work, really?

Page 39: Vaadin7
Page 40: Vaadin7

• Initial HTML• CSS (theme)• Images• JavaScript

1.2M total

307k

compress

135k

reducedwidgetset

Page 41: Vaadin7

• name=”Joonas”• button clicked

261 bytes

Page 42: Vaadin7
Page 43: Vaadin7

• name=”Joonas”• button clicked

261 bytes

• Add notification

267 bytes

Page 44: Vaadin7

Hello World!

Page 45: Vaadin7
Page 46: Vaadin7

https://github.com/vaadin/documentmanager

https://vaadin.com/learn

Source

HOWTO Screencast

Page 47: Vaadin7

3EmbracingJava

Page 48: Vaadin7

Any languageon JVM

Page 49: Vaadin7

Internet ExplorerChromeFirefoxSafariOpera

iOSAndroid

Page 50: Vaadin7

Nobrowserplugins

Nothing toinstall

Page 51: Vaadin7

Servlet Portlet

(most) clouds

Page 52: Vaadin7

EclipseIntelliJ IDEA

NetbeansMaven

Ant∙ ∙ ∙

Page 53: Vaadin7

Vaadin7today

Page 54: Vaadin7

v32002

v0.12001

OpenSource

Page 55: Vaadin7

v42006

Ajax

v52007

Page 56: Vaadin7

7Febv6

2009

Page 57: Vaadin7

934 tickets closed during 16 months of development

3939 commits made by 23 authors

Oldest ticket created 3/2008Newest ticket 2/2013

3939 commits made by 23 authors93 % by 6 persons

> 1 000 000 lines of code touched

Page 58: Vaadin7

Completestack

Renewedfrom Inside

Sass

JS

HTML5+=GWT

RPCState

UI

Field

Page 59: Vaadin7
Page 60: Vaadin7
Page 61: Vaadin7
Page 62: Vaadin7
Page 63: Vaadin7
Page 64: Vaadin7
Page 65: Vaadin7
Page 66: Vaadin7
Page 67: Vaadin7
Page 68: Vaadin7
Page 70: Vaadin7

Favorite picks7

Page 71: Vaadin7

Vaadin += GWT

Page 72: Vaadin7
Page 73: Vaadin7
Page 74: Vaadin7
Page 75: Vaadin7

GWTCompatible

Page 76: Vaadin7

Server-

Client-

side

Optim

ized for

Productivity

Opt

imiz

ed fo

r

Cont

rol

Page 77: Vaadin7

Architecture

Page 78: Vaadin7
Page 79: Vaadin7

New Windowing API

Page 80: Vaadin7
Page 81: Vaadin7

public class Vaadin6App extends Application {

public void init() { setMainWindow(createWindow()); }

public Window getWindow(String name) { Window window = super.getWindow(name); if (window == null) { window = createWindow(); window.setName(name); addWindow(window); } return window; }

private Window createWindow() { Window window = new Window("Vaadin 6 Application"); window.addComponent(new TextField("What is your name")); window.addComponent(new Button("Do not push me")); return window; }

}

Page 82: Vaadin7

@Title("Vaadin 7 Application")public class HellowUI extends UI {

protected void init(VaadinRequest request) { setContent(new VerticalLayout( new TextField("What is your name"), new Button("Do not push me"))); }

}

Page 83: Vaadin7

@PreserveOnRefresh@Title("Vaadin 7 Application")public class HellowUI extends UI {

protected void init(VaadinRequest request) { setContent(new VerticalLayout( new TextField("What is your name"), new Button("Do not push me"))); }

}

Page 86: Vaadin7

RedesignedForms

Page 87: Vaadin7

public class Employee { String firstName; String lastName; double salary; Date birthDate; // Getters, setters, …}

Form form = new Form();form.setItemDataSource( new BeanItem<Employee>(employee));

6

Page 88: Vaadin7
Page 89: Vaadin7
Page 90: Vaadin7

form.setFormFieldFactory(new FormFieldFactory() {

public Field createField(Item item, Object propertyId, Component uiContext) {

if ("birthDate".equals(propertyId)) { DateField df = new DateField(); df.setResolution(DateField.RESOLUTION_DAY); return df; }

// ..

return DefaultFieldFactory.createFieldByPropertyType(item .getItemProperty(propertyId).getType()); } });

6

Page 91: Vaadin7

GridLayout form = new GridLayout(2,2) {

TextField firstName = new TextField("First name"); TextField lastName = new TextField("Last name"); TextField salary = new TextField("Salary"); DateField birthDate = new DateField("Birth date");

{ birthDate.setResolution(Resolution.DAY); setSpacing(true); addComponent(firstName); addComponent(lastName); addComponent(birthDate); addComponent(salary); } };

BeanFieldGroup<Employee> fieldGroup = new BeanFieldGroup<Employee>(Employee.class); fieldGroup.bindMemberFields(form); fieldGroup.setItemDataSource(new BeanItem<Employee>(employee));

7

Page 92: Vaadin7

public class Person {

@Size(min = 5, max = 50) private String name;

@Min(0) @Max(100) private int age;

// + constructor + setters + getters}

Page 93: Vaadin7

model

presentation

“Joonas Lehtinen”

Component

firstName = “Joonas”lastName = “Lehtinen”

Demo

Page 94: Vaadin7

RPCState

Page 95: Vaadin7

Component

Widget

Paintable

server

clientVariable

Changes

UIDL

6

Page 97: Vaadin7

public interface ButtonRpc extends ServerRpc { public void click(MouseEventDetails details);}

private ButtonRpc rpc = RpcProxy.create(ButtonRpc.class, this);

public void onClick(ClickEvent event) { rpc.click( new MouseEventDetails(event));}

serverclient

private ButtonRpc rpc = new ButtonRpc() { public void click( MouseEventDetails details) { // do stuff }};

public Button() { registerRpc(rpc);}

Demo

Page 98: Vaadin7

JavaScriptAdd-ons

Page 99: Vaadin7

getPage().getJavaScript().addFunction("myCallback", new JavaScriptCallback() { public void call(JSONArray arguments) throws JSONException { // Do something with the arguments } });

Publish API from Java

window.myCallback('foo', 100);

Use from JavaScript

Page 100: Vaadin7

public class MyWidget extends AbstractJavaScriptComponent { public MyWidget() { addFunction("plotClick", new JavaScriptFunction() { public void call(JSONArray arguments) throws JSONException { // Do something with the event } }); }

public static class MyWidgetState extends JavaScriptComponentState { public List<List<List<Double>>> plotSeriesData = new ArrayList<List<List<Double>>>(); } public MyWidgetState getState() { return (MyWidgetState) super.getState(); }

}

Server-side Java API for Widget

Page 101: Vaadin7

window.com_example_MyWidget = function() { var element = $(this.getWidgetElement());

// Draw a plot for any server-side (plot data) state change this.onStateChange = function() { $.plot(element, this.getState().series, {grid: {clickable: true}}); }

// Communicate local events back to server-side component element.bind('plotclick', function(event, point, item) { if (item) {

var onPlotClick = this.getCallback("plotClick"); onPlotClick(item.seriesIndex, item.dataIndex); } });}

Widget implementation in JavaScript

Page 102: Vaadin7

Roadmap

Page 103: Vaadin7

Vaadin Framework 7.1• Server push

• Based on Atmosphere Framework• Web sockets, long polling and polling

• Calendar (now under Apache 2.0 license)• Limited IE 10 support without touch• CSS string inject• Renewed debug console features◦Redesigned UI/UX for debug window◦Optimize widgetset

• Arithmetics for SASS• Packaging SCSS / CSS for add-ons

April

Page 104: Vaadin7
Page 105: Vaadin7

Vaadin Charts 1.1

• New charts: • Funnel• Box plot• Waterfall• Bubble• Error bars

• Different coloring of a graph above and below a threshold• Pinch zooming and panning for touch devices

May

Page 106: Vaadin7
Page 107: Vaadin7
Page 108: Vaadin7
Page 109: Vaadin7
Page 110: Vaadin7
Page 111: Vaadin7
Page 112: Vaadin7
Page 113: Vaadin7

Vaadin TouchKit 3.0

• Vaadin 7 support

• New components: • URLField• Datefield• Combobox

April

Page 114: Vaadin7

Vaadin TestBench 3.1

• Headless mode with Phantom JS

May

Page 115: Vaadin7

Vaadin CDI

• Registering UI with @CDIUI annotation (web.xml no more)• Registering Views (to CDIViewManager)• Decoupling UI:s by injecting UI components (handy for MVP)• Injecting all the normal Java EE stuff (ejbs, events, ...)• UI Scope to complement the session scope• Supports JAAS (set @RolesAllowed for a View, ...)

• 1.0 alpha to be released any day now (in staging repo today)• Apache 2.0 License

Page 116: Vaadin7

Vaadin JPAContainer

• License changed to Apache 2.0• Vaadin 7 compatible version released in March

Page 117: Vaadin7

gettingstarted

Page 118: Vaadin7
Page 119: Vaadin7

Eclipse

Page 120: Vaadin7

mvn archetype:generate-DarchetypeGroupId=com.vaadin -DarchetypeArtifactId= vaadin-archetype-application-DarchetypeVersion=7.0.3

Maven

Page 122: Vaadin7

Download for Freevaadin.com/book

728 pages

9 789529 319701

ISBN 978-952-93-1970-1

PDF, ePub, HTML