| About the Authors | p. xiii |
| About the Technical Reviewer | p. xv |
| Acknowledgments | p. xvii |
| Introduction | p. xix |
| Introducing Rich Internet Applications (RIAs) | p. 1 |
| A Short History | p. 1 |
| Mainframe Applications | p. 2 |
| Client/Server Applications | p. 3 |
| Web Applications | p. 3 |
| Rich Web Applications | p. 4 |
| Introducing Ajax | p. 5 |
| Asynchronous | p. 5 |
| JavaScript | p. 8 |
| XML | p. 9 |
| From AJAX to Ajax | p. 11 |
| Advantages and Disadvantages of RIAs | p. 12 |
| RIA Benefits | p. 13 |
| RIA Shortcomings | p. 13 |
| When Should You Use Ajax? | p. 14 |
| Different Approaches to Building RIAs | p. 14 |
| Handwritten JavaScript | p. 14 |
| Flex | p. 15 |
| Java Applets and JavaFX | p. 16 |
| Silverlight | p. 17 |
| OpenLaszlo | p. 17 |
| Echo2 | p. 18 |
| GWT | p. 19 |
| Summary | p. 19 |
| Introducing Google Web Toolkit (GWT) | p. 21 |
| Why GWT? | p. 21 |
| From JavaScript to Java | p. 21 |
| Considerations for Using GWT | p. 22 |
| The Basics | p. 23 |
| Java to JavaScript Compiler | p. 23 |
| JRE Emulation Library | p. 25 |
| UI Library | p. 29 |
| GWT Application Layout | p. 31 |
| Module Descriptor | p. 32 |
| Public Resources | p. 34 |
| Introducing the Sample Application | p. 36 |
| Handy Development Tools | p. 38 |
| Web Developer Add-on | p. 38 |
| Firebug | p. 40 |
| LiveHTTPHeaders | p. 42 |
| Cacheability Engine | p. 43 |
| Summary | p. 43 |
| Getting Started | p. 45 |
| Installing GWT | p. 45 |
| Project Structure | p. 47 |
| Utility Scripts | p. 48 |
| Application Creator Script | p. 48 |
| Project Creator Script | p. 50 |
| Writing Code | p. 50 |
| Cleaning Up Generated Code | p. 51 |
| Start Coding | p. 51 |
| Running Code | p. 52 |
| Styling Code with CSS | p. 54 |
| Debugging | p. 56 |
| Summary | p. 57 |
| GWT UI Components | p. 59 |
| GWT Component Model | p. 60 |
| The RootPanel | p. 61 |
| Basic Widgets | p. 62 |
| The Label Widget | p. 62 |
| The HTML Widget | p. 63 |
| The Button Widget | p. 64 |
| The ToggleButton Widget | p. 65 |
| The Hyperlink Widget | p. 67 |
| Form Widgets | p. 68 |
| Panels | p. 78 |
| Creating the Sample Application | p. 79 |
| Designing the Main Look and Feel of GWTasks | p. 79 |
| Showing the Categories and Task Lists | p. 82 |
| Enhancing the User Experience with HorizontalSplitPanel | p. 85 |
| Summary | p. 87 |
| Building an Advanced UI | p. 89 |
| Using Tables | p. 89 |
| Using Grid | p. 89 |
| Using FlexTable | p. 91 |
| Climbing Trees | p. 94 |
| Using PopupPanel and DialogBox | p. 97 |
| PopupPanel | p. 97 |
| Using DialogBox | p. 99 |
| Componentizing the Code Base | p. 101 |
| Extending GWT Panels | p. 101 |
| Using Composites | p. 105 |
| Creating the TitledPanel Component | p. 113 |
| LoginPane and MainPane-The Missing Components | p. 122 |
| GWT Application Architecture | p. 125 |
| Layers and Packages | p. 126 |
| Application Events | p. 129 |
| Managing the Data | p. 133 |
| Some Last Words on Styles | p. 139 |
| Summary | p. 139 |
| Server Integration | p. 141 |
| GWT RPC | p. 141 |
| Defining the Interface | p. 141 |
| Implementing the Server Side | p. 144 |
| Implementing the Client Side | p. 145 |
| Alternatives to GWT RPC | p. 149 |
| Basic Ajax | p. 149 |
| JSON | p. 151 |
| Summary | p. 156 |
| Testing GWT Applications | p. 157 |
| What Is Testing? | p. 157 |
| Unit Testing | p. 158 |
| Basic Unit Testing | p. 158 |
| GWT JUnit Integration | p. 161 |
| Comparing Basic and GWT Unit Testing | p. 164 |
| Functional Testing | p. 164 |
| Introducing Selenium | p. 165 |
| Benchmarking | p. 181 |
| What Is Benchmarking? | p. 182 |
| Writing a Benchmark | p. 182 |
| Summary | p. 186 |
| Advanced Topics | p. 187 |
| Internationalization (i18n) | p. 187 |
| A Few Words on Java Resource Bundles | p. 188 |
| The Constants Interface | p. 189 |
| The ConstantsWithLookups Interface | p. 192 |
| The Messages Interface | p. 194 |
| Formats | p. 196 |
| Image Bundles | p. 197 |
| Using Image Bundles Within GWTasks | p. 199 |
| Tree Image Bundles | p. 202 |
| Browser History and Back Button Support | p. 203 |
| GWT History View | p. 204 |
| The History Class | p. 205 |
| Revisiting Hyperlinks | p. 207 |
| Bookmark Support | p. 208 |
| Integrating GWTasks with History Navigation | p. 208 |
| JavaScript Native Interface (JSNI) | p. 211 |
| Writing Native JavaScript Methods | p. 211 |
| Calling GWT Methods from JavaScript | p. 213 |
| Exception Handling | p. 214 |
| Uploading Files | p. 215 |
| Monitoring Progress on the Server | p. 218 |
| Monitoring Progress on the Client | p. 219 |
| Summary | p. 220 |
| IDE Support | p. 223 |
| Eclipse | p. 223 |
| IntelliJ IDEA | p. 226 |
| Resources | p. 229 |
| Index | p. 231 |
| Table of Contents provided by Ingram. All Rights Reserved. |