Vaadin7 modern-web-apps-in-java

108
@joonaslehtinen Vaadin 7: Modern web apps in Java

description

 

Transcript of Vaadin7 modern-web-apps-in-java

Page 1: Vaadin7 modern-web-apps-in-java

@joonaslehtinenVaadin 7: Modern web apps in Java

Page 2: Vaadin7 modern-web-apps-in-java

slideshare.com/joonaslehtinen

Page 3: Vaadin7 modern-web-apps-in-java

Intro toVaadin

new Label(“Hello world”)

Page 4: Vaadin7 modern-web-apps-in-java

New in

7

Page 5: Vaadin7 modern-web-apps-in-java

Gettingstarted

QA

Page 6: Vaadin7 modern-web-apps-in-java
Page 7: Vaadin7 modern-web-apps-in-java

User interface framework for rich

web applications

Page 8: Vaadin7 modern-web-apps-in-java

htmljava

Page 9: Vaadin7 modern-web-apps-in-java

Why on earth?

Page 10: Vaadin7 modern-web-apps-in-java
Page 11: Vaadin7 modern-web-apps-in-java

expectations

Page 12: Vaadin7 modern-web-apps-in-java

reality

Page 13: Vaadin7 modern-web-apps-in-java

businessconsumer

“million” users10 views1!/user

“500” users50 views500!/user

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

Page 14: Vaadin7 modern-web-apps-in-java

ProblemHow to build consumer

grade UX with business system budget

Page 15: Vaadin7 modern-web-apps-in-java

How?

Page 16: Vaadin7 modern-web-apps-in-java

Key Ideas

Page 17: Vaadin7 modern-web-apps-in-java

123Key Ideas

Page 18: Vaadin7 modern-web-apps-in-java

1RichComponents

Page 19: Vaadin7 modern-web-apps-in-java

User IntefaceData Source

Theme

Page 25: Vaadin7 modern-web-apps-in-java
Page 26: Vaadin7 modern-web-apps-in-java
Page 27: Vaadin7 modern-web-apps-in-java
Page 28: Vaadin7 modern-web-apps-in-java
Page 29: Vaadin7 modern-web-apps-in-java
Page 30: Vaadin7 modern-web-apps-in-java

User IntefaceData Source

Theme

Page 35: Vaadin7 modern-web-apps-in-java

User IntefaceData Source

Theme

Page 36: Vaadin7 modern-web-apps-in-java
Page 37: Vaadin7 modern-web-apps-in-java

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

Page 38: Vaadin7 modern-web-apps-in-java

Server + Client

Page 39: Vaadin7 modern-web-apps-in-java

2Server + Client

Page 40: Vaadin7 modern-web-apps-in-java

Web application layers

JavaScriptJava toJavaScript

Webserver

Backendserver

required optional optionalrequired

RPC

optional

Vaa

din

required optionalrequired

GW

T

requiredrequiredJS

requiredrequired

required required

Page 41: Vaadin7 modern-web-apps-in-java

How does it work, really?

Page 42: Vaadin7 modern-web-apps-in-java
Page 43: Vaadin7 modern-web-apps-in-java

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

1.2M total

307k

compress

135k

reducedwidgetset

Page 44: Vaadin7 modern-web-apps-in-java

• name=”Joonas”• button clicked

261 bytes

Page 45: Vaadin7 modern-web-apps-in-java
Page 46: Vaadin7 modern-web-apps-in-java

• name=”Joonas”• button clicked

261 bytes

• Add notification

267 bytes

Page 47: Vaadin7 modern-web-apps-in-java

Trying it out

Page 49: Vaadin7 modern-web-apps-in-java

3EmbracingJava

Page 50: Vaadin7 modern-web-apps-in-java

Any JVMLanguage

Page 51: Vaadin7 modern-web-apps-in-java

Internet ExplorerChromeFirefoxSafariOpera

iOSAndroid

Page 52: Vaadin7 modern-web-apps-in-java

Nobrowserplugins

Nothing toinstall

Page 53: Vaadin7 modern-web-apps-in-java

Servlet Portlet

(most) clouds

Page 54: Vaadin7 modern-web-apps-in-java

EclipseIntelliJ IDEA

NetbeansMaven

Ant∙ ∙ ∙

Page 55: Vaadin7 modern-web-apps-in-java

Vaadin7today

0.2

Page 56: Vaadin7 modern-web-apps-in-java

v32002

v0.12001

OpenSource

Page 57: Vaadin7 modern-web-apps-in-java

v42006

Ajax

v52007

Page 58: Vaadin7 modern-web-apps-in-java

7Febv6

2009

Page 59: Vaadin7 modern-web-apps-in-java

Completestack

Renewedfrom Inside

Sass

JS

HTML5+=GWT

RPCState

UI

Field

Page 60: Vaadin7 modern-web-apps-in-java
Page 61: Vaadin7 modern-web-apps-in-java
Page 62: Vaadin7 modern-web-apps-in-java
Page 63: Vaadin7 modern-web-apps-in-java
Page 64: Vaadin7 modern-web-apps-in-java
Page 65: Vaadin7 modern-web-apps-in-java
Page 66: Vaadin7 modern-web-apps-in-java
Page 67: Vaadin7 modern-web-apps-in-java
Page 68: Vaadin7 modern-web-apps-in-java
Page 69: Vaadin7 modern-web-apps-in-java
Page 71: Vaadin7 modern-web-apps-in-java

Favorite picks7

Page 72: Vaadin7 modern-web-apps-in-java

Vaadin += GWT

Page 73: Vaadin7 modern-web-apps-in-java
Page 74: Vaadin7 modern-web-apps-in-java
Page 75: Vaadin7 modern-web-apps-in-java
Page 76: Vaadin7 modern-web-apps-in-java

GWTCompatible

Page 77: Vaadin7 modern-web-apps-in-java

Server-

Client-

side

Optim

ized for

Productivity

Opt

imiz

ed fo

r

Cont

rol

Page 78: Vaadin7 modern-web-apps-in-java

Server-Client-

sideO

ptim

ized

for

Prod

uctiv

ity

Optim

ized for

Control

Page 79: Vaadin7 modern-web-apps-in-java

Architecture

Page 80: Vaadin7 modern-web-apps-in-java
Page 81: Vaadin7 modern-web-apps-in-java

New Windowing API

Page 82: Vaadin7 modern-web-apps-in-java
Page 83: Vaadin7 modern-web-apps-in-java

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 84: Vaadin7 modern-web-apps-in-java

@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 87: Vaadin7 modern-web-apps-in-java

RedesignedForms

Page 88: Vaadin7 modern-web-apps-in-java

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 89: Vaadin7 modern-web-apps-in-java
Page 90: Vaadin7 modern-web-apps-in-java
Page 91: Vaadin7 modern-web-apps-in-java

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 92: Vaadin7 modern-web-apps-in-java

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 93: Vaadin7 modern-web-apps-in-java

public class Person {

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

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

// + constructor + setters + getters}

Page 94: Vaadin7 modern-web-apps-in-java

model

presentation

“Joonas Lehtinen”

Component

firstName = “Joonas”lastName = “Lehtinen”

Demo

Page 95: Vaadin7 modern-web-apps-in-java

RPCState

Page 96: Vaadin7 modern-web-apps-in-java

Component

Widget

Paintable

server

clientVariable

Changes

UIDL

6

Page 98: Vaadin7 modern-web-apps-in-java

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 99: Vaadin7 modern-web-apps-in-java

JavaScriptAdd-ons

Page 100: Vaadin7 modern-web-apps-in-java

getPage().getJavaScript().addCallback("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 101: Vaadin7 modern-web-apps-in-java

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 modern-web-apps-in-java

public class MyWidget extends AbstractJavaScriptComponent {

public MyWidget() { registerCallback("plotClick", new JavaScriptCallback() { public void call(JSONArray arguments) throws JSONException { // Do something with the event } }); }

public static class MyWidgetState extends ComponentState { public List<List<List<Double>>> plotSeriesData = new ArrayList<List<List<Double>>>(); // getters & setters }

}

Server-side Java API for Widget

Page 103: Vaadin7 modern-web-apps-in-java

gettingstarted

Page 104: Vaadin7 modern-web-apps-in-java
Page 105: Vaadin7 modern-web-apps-in-java

Eclipse

Page 106: Vaadin7 modern-web-apps-in-java

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

Maven

Page 107: Vaadin7 modern-web-apps-in-java

Download for Freevaadin.com/book

728 pages

9 789529 319701

ISBN 978-952-93-1970-1

PDF, ePub, HTML

Page 108: Vaadin7 modern-web-apps-in-java

? [email protected] vaadin.com/joonas

@joonaslehtinen

slideshare.com/joonaslehtinen