Chapter 1. An introduction to Play
Figure 1.1. Play framework stack
Figure 1.2. The Windows Environment Variables dialog
Figure 1.3. The default welcome page for a new Play application
Figure 1.4. Simple text output
Chapter 2. The parts of an application
Figure 2.1. Components of a route
Figure 2.2. A new Play application in Eclipse
Figure 2.3. Importing a project in Eclipse
Figure 2.4. NetBeans plugin center
Figure 2.5. Install the NetBeans plugin
Figure 2.6. Open a new Play project in NetBeans IDE
Figure 2.7. A new Play application in NetBeans IDE
Figure 2.8. A new Play application in IntelliJ IDEA
Chapter 3. A basic CRUD application
Figure 3.1. Requests routed to actions
Figure 3.2. Play’s TODO placeholder at /products
Figure 3.3. Our products listing
Chapter 4. An enterprise app, Play-style
Figure 4.1. Enterprise application ecosystem
Figure 4.2. Enterprise application ecosystem after integration
Chapter 5. Controllers—handling HTTP requests
Figure 5.1. Role of the controller
Figure 5.2. Controller lifecycle
Figure 5.3. Detailed view of the controller lifecycle
Figure 5.4. Adding Content to the controller lifecycle
Figure 5.5. Role of the router
Figure 5.7. Request with query string
Figure 5.8. An error in the routes file
Figure 5.10. Route definition with query string
Figure 5.11. Bad request error screen
Figure 5.12. Bad request error screen for missing parameter
Figure 5.13. In JEE, application scope is the longest lived and page scope is the shortest lived.
Figure 5.14. In Play, request scope is the shortest lived and session scope is the longest lived.
Figure 5.15. Submitting an invalid form without using the flash scope
Figure 5.16. Submitting an invalid form using the flash scope
Chapter 6. Handling user input
Figure 6.1. Our “create new product” form
Figure 6.2. “Create product form” workflow
Figure 6.3. The “create new product” form
Figure 6.4. “Edit product” workflow
Figure 6.5. The binding process
Figure 6.6. Product–Tag relationships
Figure 6.7. Binding HTML check boxes
Figure 6.8. Edit product form with tags
Figure 6.9. The binding process
Figure 6.10. Body parser interaction with an incoming request
Chapter 7. Models and persistence
Figure 7.1. The data model representing our warehouse
Figure 7.2. A reminder of our data model
Figure 7.3. Focus on the Product class
Figure 7.4. Persistence in Play 2 with Ebean and H2
Figure 7.5. Play offering database evolution
Figure 7.6. H2 console showing the database schema
Figure 7.7. H2 console showing the contents of the product table
Figure 7.8. Focus on the StockItem class.
Figure 7.9. The relationship between StockItems and Products
Figure 7.10. The one-to-many database relationship
Figure 7.11. Looking at the stock item table in the H2 console
Figure 7.12. A one-to-many database relationship
Figure 7.13. The Warehouse and Address classes in the data model
Figure 7.14. A one-to-many database relationship
Figure 7.15. A one-to-one database relationship
Chapter 8. Producing output with view templates
Figure 8.1. Runtime template error in Play 1
Figure 8.2. Link text, broken down
Figure 8.3. A multitoken statement
Chapter 9. Asynchronous data
Figure 9.1. Web framework with synchronous architecture
Figure 9.2. Play’s asynchronous architecture
Figure 9.3. Parallel execution in Play
Figure 9.4. Sequence events generated reports
Figure 9.5. Screenshot of our application once the reports are generated
Figure 9.6. Screenshot of our future application
Figure 9.7. Unidirectional communication with Comet
Figure 9.8. WebSocket pickup order application
Figure 9.9. Bidirectional communication with WebSocket
Figure 9.10. Output server side
Figure 9.11. Output client side
Figure 9.12. Sequence diagram of a client clicking on an order
Chapter 10. Security
Figure 10.2. Pop-up window hello user
Figure 10.3. Basic authentication
Chapter 11. Modules and deployment
Chapter 12. Testing your application