+ Check the calendar widget and the tooltips on the credit card fields. + The form uses Ajax-based validations to redisplay server-side errors without refreshing the entire page. + The booking bean backing the form is a flow-scoped object (see booking-flow.xml). +
+
+
+
+
+
+
+
+
+ Note that the command button actions raise events (e.g. "revise") instead of specifying method expressions. + The events result in transitions on the server side (see reviewBooking state in booking-flow.xml). +
+
+
+
+
+
+ #{booking.creditCard} +
++ This page uses the PrimeFaces panel component to display a search form. + Mouse over the "Search String" field to see its tooltip. + If you are logged a second panel will show your current bookings. + Both panels can be toggled on and off. +
++ Clicking "Book" will launch the booking sub-flow (see the subflow state in main-flow.xml). +
++ The booking flow is protected with Spring Security (see the secured attribute in booking-flow.xml). +
++ Clicking "Back to Search" will take you to the stateful search results. +
++ This page uses the PrimeFaces data table backed by a lazily loaded DataModel (see HotelLazyDataModel.java). + Page navigation is Ajax-based and uses JSF 2 partial rendering. + The name and city columns support forward and reverse sorting. +
++ The DataModel is created and stored in view scope when the view is first entered (see main-flow.xml). + When the user makes a selection, the selection is stored in a flow-scoped "hotel" variable before transitioning to the detail page. +
++ This is a simple standalone JSF page. +
++ Clicking the "Start" link below will launch the main to search for hotels (see main-flow.xml). + The main flow in turn launches the booking sub-flow to book the hotel (see booking-flow.xml). +
++ The main flow is accessible without logging in while the booking flow requires authentication. +
++ Key features illustrated in this sample: +
++ Form-based authentication with Spring Security. + Spring Security is first enabled in web.xml via DelegatingFilterProxy. + It's configuration is located in security-config.xml. + Flow definitions can further be protected using the secured attribute (see booking-flow.xml). +
+Valid username/passwords are:
+