google web toolkit...

36
Copyright © Clarity Training, Inc. 2009 Google Web Toolkit code.google.com/webtoolkit David Geary corewebdeveloper.com [email protected]

Upload: others

Post on 01-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

Google Web Toolkit code.google.com/webtoolkit

David Gearycorewebdeveloper.com

[email protected]

Page 2: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2008-2009

Code

2

http://coolandusefulgwt.com

Page 3: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

This session

IntroductionOn the clientRemote procedure callsIntegrating JavaScriptAjax Testing

Page 4: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2008-20094

Old problems, new solutions

Page 5: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

The premise

5

• Ajax is hard

• It requires:

• expertise in JavaScript

• a mixture of disparate technologies

• integration of client- and server-side code

• Ajax libraries make things easier, but...

Page 6: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

The promise

6

• You can develop Ajax-enabled web applications in Java

• Implement the client-side UI in pure Java

• Very little knowledge of JavaScript required

• Familiar idioms from AWT and Swing

Page 7: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

RAD development

7

• Application generator for a quick start

• Convention over configuration

• Instant turnaround after changes

• Non-Ajax Ajax

• Awesome productivity

Page 8: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Client-side code

8

• You implement user interfaces in pure Java

• However, it's a limited subset of Java

• Selected choices from java.lang and java.util

• In Hosted mode, your code runs in the JVM

• Use your favorite debugger

• In Web mode: JavaScript runs in the browser

• GWT compiles Java to JavaScript

Page 9: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Server-side code

9

• Server-side code is written in Java

• All of Java is available

• Code is compiled normally

• Server-side code is packaged in services

• Remote procedure calls (RPCs) from the client to the server

• Services are accessed with a remote servlet

Page 10: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

GWT features

10

• Debug client-side Java code

• Make RPCs to a servlet

• Incorporate JavaScript with native methods

• Use widgets and implement new ones

• Use the browser history mechanism

• Integration with JUnit

• Internationalization

Page 11: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

GWT's sweet spot

11

• GWT is not for everyone. Here's the sweet spot:

• Swing-like applications that run in a browser

• Java developers who've used a desktop or component-based framework

Page 12: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

12

GWT Designer

Page 13: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Demonstration

13

Page 14: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

This session

IntroductionWidgetsRemote procedure callsIntegrating JavaScriptAjax Testing

Page 15: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Widget hierarchy (partial)

15

Page 16: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Commonly used Widgets

16

• The basic widgets

• Label, Image, TextBox, Button, Hyperlink

• FileUpload, Tree, TabPanel, Popup, FlexTable

• Panels

• HorizontalPanel and VerticalPanel,

• AbsolutePanel, Grid, FocusPanel

• Listeners

• ClickListener, MouseListener, FocusListener,...

Page 17: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Implementing the UI

17

• Implement EntryPoint.onModuleLoad()

• Create and populate panels with widgets

• Add panel(s) to the root panel

• Add a panel directly to the root panel, or...

• ...position widgets in slots

• Implement event handlers for your widgets

Page 18: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Localizing text

18

loginPrompt=Please log innamePrompt=NamepasswordPrompt=PasswordloginButtonText=Log inwelcomeMsg=Welcome!

Properties file

public interface LoginConstants extends Constants { String loginPrompt(); String namePrompt(); String passwordPrompt(); String loginButtonText(); String welcomeMsg();}

Java interface

i18nCreator

Page 19: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Localizing text (cont)

19

private static final LoginConstants constants = (LoginConstants) GWT.create(LoginConstants.class);

final Label loginPrompt = newLabel(constants.loginPrompt()); final Label namePrompt = new Label(constants.namePrompt()); ...

Page 20: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Using CSS

20

• Widgets have styles

• UIObject.addStyleName(String styleName)

• UIObject.removeStyleName(String styleName)

• Widgets have default styles

• labels: .gwt-Label{...}

• buttons: .gwt-Button{...}

• ...

Page 21: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

Manipulating styles

fp.addFormHandler(new FormHandler() { public void onSubmit(FormSubmitEvent event) { ... statusMessage.removeStyleName("successBorder"); statusMessage.removeStyleName("failureBorder"); ... if (statusText.equals(SUCCESS_MESSAGE)) statusMessage.addStyleName("successBorder"); else statusMessage.addStyleName("failureBorder"); ... }});

.successBorder { border: thin solid darkGray;}

.failureBorder { border: thick solid red;}

Page 22: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Demonstration

22

Page 23: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

This session

IntroductionOn the clientRemote procedure callsIntegrating JavaScriptAjax Testing

Page 24: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

A weather application

• Two interfaces:

• Remote interface

• Asynchronous interface

• One class:

• Remote servlet class

Page 25: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

Remote and asynchronous interfaces

public interface WeatherService extends RemoteService { public String getWeatherForZip(String zip);}

public interface WeatherServiceAsync { public void getWeatherForZip(String zip, AsyncCallback<String> callback);}

Implemented by a servlet

Proxy interface

Page 26: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

Servlet mapping in WEB-INF/web.xml

<servlet> <servlet-name>weather</servlet-name> <servlet-class>com.clarity.server.WeatherServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>weather</servlet-name> <url-pattern>/places/weather</url-pattern> </servlet-mapping>

Page 27: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

The servlet

@RemoteServiceRelativePath("weather")

public class WeatherServiceImpl extends RemoteServiceServlet implements WeatherService {

public String getWeatherForZip(String zip) { // invoke Yahoo! weather web service }}

Page 28: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

Using the weather service

WeatherServiceAsync service = (WeatherServiceAsync) GWT.create(WeatherService.class);

service.getWeatherForZip("80538", new AsyncCallback<String>() { public void onSuccess(String result) { displayHTML(result); } public void onFailure(Throwable t) { showAlert("Remote service call failed: " + t.getMessage()); } } );

Page 29: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Demonstration

29

Page 30: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

This session

IntroductionOn the clientRemote procedure callsIntegrating JavaScriptAjax Testing

Page 31: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Integrating Script.aculo.us effects

31

public class MyApp implements EntryPoint { ... public void onModuleLoad() { Label errorMessage = new Label(”Get it together!”); ... errorMessage.setVisible(false); ... applyEffect(”Shake”, errorMessage.getElement()); } ... private native void applyEffect(String effect, Element e) /*-{ $wnd.Effect[effect](e); }-*/; ...}

Page 32: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Demonstration

32

Page 33: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

This session

IntroductionOn the clientRemote procedure callsIntegrating JavaScriptAjax Testing

Page 34: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Using junitCreator

34

junitCreator -junit /Developer/Java/Tools/junit-4.5/junit-4.5.jar -module com.clarity.Places -eclipse Places com.clarity.client.PlacesTest

Page 35: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

A test

35

public class PlacesTest extends GWTTestCase { public String getModuleName() { return "com.clarity.Places"; } public void testGetAddresses() { final Places demo = new Places(); demo.getAddresses(); final ListBox addresses = demo.addresses; new Timer() { public void run() { assert (addresses.getItemCount() == 6); assert (demo.addressList.size() == 6); System.out.println(addresses.toString()); finishTest(); } }.schedule(10000);

delayTestFinish(20000); }}

Page 36: Google Web Toolkit code.google.com/webtoolkitjaoo.dk/.../DavidGeary_IntroducingGoogleWebToolkitGWT.pdf · 2009-10-06 · GWT's sweet spot 11 •GWT is not for everyone. Here's the

Copyright © Clarity Training, Inc. 2009

The End

Thanks for coming!