![Page 1: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/1.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Spring MVC 2.5 and Beyond
Covering Core Spring MVC and official Spring MVC Extensions
Rossen StoyanchevRossen StoyanchevSenior Consultant, SpringSource
![Page 2: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/2.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
2
Agenda
• Core Spring MVC 2.5– New @Controller model– More convention-over-configuration
• The New Spring Web Flow 2.0– Simplified flow definition language– Ajax event model– Full JSF support
![Page 3: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/3.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3
Spring MVC
• Spring MVC is a popular web framework• Spring MVC is the platform for developing
Spring-based web applications– All extensions like Web Flow plug into it
• Spring MVC 2.5 greatly simplifies the Controller programming model through use of annotations and convention-over-configuration– “Spring @MVC” has emerged as a catch phrase for
talking about these new features
![Page 4: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/4.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4
@Controller - What is it?
• A new POJO-based “multi-action” controller model– With support for processing forms – Can fully supercede use of the
SimpleFormController and MultiActionController classes
![Page 5: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/5.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5
@Controller - How Does It Work?
• Define your Controllers as simple POJO classes instead of extending from framework-specific base classes
• Map URLs to action methods using annotations
• Declare action method arguments to bind HTTP request data
![Page 6: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/6.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6
Example @Controller
@Controllerpublic class HotelsController {
@RequestMapping public void index() {…}
@RequestMapping public void search(SearchCriteria criteria, BindingResult result) {…}
@RequestMapping public void show() {…}}
![Page 7: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/7.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7
Equivalent Spring 2.0 Example
public class HotelsController extends MultiActionController {
public ModelAndView index(HttpServletRequest req, HttpServletResponse res) {…}
public ModelAndView search(HttpServletRequest req, HttpServletResponse res) {…}
public ModelAndView show(HttpServletRequest req, HttpServletResponse res) {…}
}
![Page 8: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/8.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8
URL->@Controller Method Mapping
• Mapping is based on the request path• Can also use the request method• The strategies for mapping are
– Simple– Controller Relative– Externalized Controller Relative– Convention-based
![Page 9: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/9.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9
Simple
@Controllerpublic class HotelsController { @RequestMapping("/hotels/index") public void index() {…}
@RequestMapping("/hotels/search") public void search() {…}
@RequestMapping("/hotels/show") public void show() {…}}
![Page 10: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/10.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10
Controller Relative
@Controller@RequestMapping("/hotels/*")public class HotelsController { @RequestMapping(method=RequestMethod.GET) public void index() {…}
@RequestMapping public void search() {…}
@RequestMapping(method=RequestMethod.GET) public void show() {…}}
![Page 11: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/11.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11
Externalized Controller Relative
@Controllerpublic class HotelsController { @RequestMapping(method=RequestMethod.GET) public void index() {…}
@RequestMapping public void search() {…}
@RequestMapping(method=RequestMethod.GET) public void show() {…}}
<bean class=“...SimpleUrlHandlerMapping”> <property name="mappings"> <value> /hotels/*=hotelsController </value> </property></bean>
![Page 12: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/12.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12
Convention Based
@Controllerpublic class HotelsController { @RequestMapping(method=RequestMethod.GET) public void index() {…}
@RequestMapping public void search() {…}
@RequestMapping(method=RequestMethod.GET) public void show() {…}}
<bean class=“...ControllerClassNameUrlHandlerMapping” />
![Page 13: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/13.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13
Action Method Binding
• You can bind HTTP Request data to action method parameters, including– Simple parameter types– Bean parameter types– Several special parameter types
![Page 14: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/14.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14
Simple Parameter Types
@RequestMapping
public void show(@RequestParam("id") Long id) {…}
![Page 15: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/15.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 15
Bean Parameter Types
@RequestMapping
public void search(SearchCriteria criteria) {…}
![Page 16: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/16.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16
Special Parameter Types
@RequestMappingpublic void foo(HttpServletRequest req, …) {…}
@RequestMappingpublic void foo(HttpServletResponse res, …) {…}
@RequestMappingpublic void foo(HttpSession session, …) {…}
@RequestMappingpublic void foo(Locale locale, …) {…}
![Page 17: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/17.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
Special Parameter Types (2)
@RequestMapping
public void foo(Model model, …) {…}
@RequestMapping
public void search(SearchCriteria criteria,
BindingResult bindingResult, …) {…}
@RequestMapping
public void foo(SessionStatus status, …) {…}
![Page 18: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/18.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18
Selecting Views
• Your controllers can select views to render– By convention (the default)– By returning a view name string
![Page 19: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/19.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19
Selecting a View by Convention
@Controllerpublic class HotelsController {
@RequestMapping
public void index() {…}
}
• The request path is used as the view name by default– Assume a request URL of /hotels/index– The view rendered will be /WEB-INF/hotels/index.jsp– Customize this convention with a RequestToViewNameTranslator– Custom default view resolution rules with a ViewResolver
![Page 20: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/20.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20
Selecting a View Explicitly
@Controllerpublic class HotelsController {
@RequestMapping
public String index() { … return “/hotels/index”}
}
• The name of the view to render is returned• Customize how the view is resolved with a ViewResolver
![Page 21: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/21.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21
Exporting @Controllers
• How do get your @Controller exported to the web?
• Two techniques– Explicit bean definition– Classpath Scanning
![Page 22: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/22.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22
Explicit Bean Definition
<bean class=“...SimpleUrlHandlerMapping”> <property name="mappings"> <value> /hotels/*=hotelsController </value> </property></bean>
<bean id=“hotelsController” class=“…HotelsController” />
![Page 23: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/23.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23
Classpath Scanning
<!-- Activates annotation-based configuration --><context:annotation-config />
<!-- Scans for @Components to export and configure --><context:component-scan base-package=”com.mycompany.app”/>
![Page 24: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/24.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24
Demo
• Spring Travel Reference Application– @Controller usage
![Page 25: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/25.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 25
Spring Web Flow
• An official Spring MVC extension for implementing flows– “A flow encapsulates a reusable sequence of steps
that can execute in different contexts”
• Web Flow 2 greatly simplifies the flow programming model– SWF 2 flows on average 50% smaller than SWF 1
• Web Flow 2 adds major new features– Comprehensive JSF support– First class Ajax support– Spring Security integration– View scope
![Page 26: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/26.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26
Web Flow Sweet Spot
![Page 27: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/27.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 27
Web Flow 2 to Web Flow 1
• Spring Travel Reference App v1– 163 lines of Flow code across 3 artifacts
• Flow definition, Form Action Class, Bean File
• Spring Travel Reference App v2– 33 lines of Flow code in 1 artifact
• Savings attributed to– More concise flow definition syntax– Enhanced expression language integration– Declarative view model binding and validation– Also, a new flow inheritance capability can further
simplify large applications
![Page 28: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/28.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28
Flow Definition Syntax Compared
Invoking Actions
v2<evaluate expression="bookingService.createBooking(hotelId)” result="flowScope.booking" />
v1<bean-action bean="bookingService” method="createBooking”> <method-arguments> <argument value="${flowScope.hotelId}” /> </method-arguments> <method-result name="booking” scope="flow” /></bean-action>
![Page 29: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/29.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29
View Model Binding
v2<view-state id="enterBookingDetails" model="booking"> <transition on="proceed" to="reviewBooking" /> <transition on="cancel" to="cancel" bind="false" /></view-state>
v1<view-state id="enterBookingDetails" view="enterBookingDetails.jsp"> <render-actions>
<action bean="formAction" method=”setupForm" /> </render-actions> <transition on="proceed" to="reviewBooking">
<action bean=”formAction" method="bindAndValidate" />
</transition> <transition on="cancel" to="cancel" /></view-state>
![Page 30: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/30.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30
Mapping Flow Input/Output
v2<subflow-state id="bookHotel" subflow="booking"> <input name="hotelId” /> <transition on="bookingConfirmed" to="finish” /></subflow-state>
v1<subflow-state id="bookHotel" flow="booking"> <attribute-mapper> <input-mapper> <mapping source="flowScope.hotelId" target="hotelId” </input-mapper> </attribute-mapper> <transition on="bookingConfirmed" to="finish” /></subflow-state>
![Page 31: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/31.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31
Flow Definition Inheritance
parent.xml
<flow abstract="true">
<!-- Common elements -->
</flow>
child.xml
<flow parent=”parent">
<!-- Your specific elements -->
</flow>
![Page 32: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/32.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32
Spring Security Integration
<flow> <secured attributes="ROLE_USER" /></flow>
• Can also secure states and transitions• Can refer to user Principal using EL
– Use the currentUser implicit variable– Resolvable within flow and view templates
![Page 33: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/33.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 33
Flow-Managed Persistence
<flow> <persistence-context/></flow>
• Scopes a persistence context with this flow• Automatically used by your data access objects• Can also call the flow’s EntityManager directly
using EL– e.g. entityManager.persist(booking)
![Page 34: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/34.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34
Ajax with View Scope
<view-state id="reviewHotels"> <on-render> <evaluate expression="service.findHotels(criteria)" result="viewScope.hotels" /> </on-render> <transition on="previous"> <evaluate expression="criteria.previousPage()" /> <render fragments="hotelsTable" /> </transition> <transition on="next"> <evaluate expression="criteria.nextPage()" /> <render fragments="hotelsTable" /> </transition> <transition on="select" to="reviewHotel" /> <transition on="changeSearch" to="changeCriteria" /></view-state>
View scope
Partial page rendering
![Page 35: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/35.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35
Popups
<view-state id="changeCriteria" popup="true">
<transition on="search" to="reviewHotels” />
</view-state>
![Page 36: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/36.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 36
JSF Support - “Spring Faces”
• Combines the JSF UI component model with Web Flow navigation/state management– All in a native Spring MVC environment
• Spring Faces also includes a lightweight JSF component library– Designed for the 80%
• Includes Ajax support, client-side form validation– Built on a new Javascript module called “Spring.js”
• Integrates Dojo as the primary UI toolkit• Applies progressive enhancement techniques
![Page 37: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/37.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37
Demo
• Spring Travel Reference Application– Web Flow usage– Spring Faces usage– Spring Security integration– Progressive enhancement
![Page 38: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/38.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38
Summary
• Spring MVC 2.5 is a great leap forward– Elegant @Controller model
• Web Flow 2 is also a great leap forward– Simplified flow definition language– Groundbreaking work in the areas of Progressive Ajax
and JSF
• Give them a try!• Get involved in the Spring community at
http://forum.springframework.org• These slides are also available at
http://blog.springsource.com– Be sure to subscribe
![Page 39: Spring MVC 2.5 and Beyond - chariotsolutions.comchariotsolutions.com/wp-content/uploads/presentations/archive/525/...–“A flow encapsulates a reusable sequence of steps that can](https://reader031.vdocuments.us/reader031/viewer/2022011808/5c75da4c09d3f2a52b8c15f2/html5/thumbnails/39.jpg)
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 39
Questions?