Example 1. PersonController
The person controller still handles delete and search. It also has a newPerson()
method used by the 'create' action-state in
the person flow to put a new person in scope for the form.
@Controller public class PersonController { final Logger logger = LoggerFactory.getLogger(PersonController.class); static final String SEARCH_VIEW_KEY = "/person/search"; static final String SEARCH_MODEL_KEY = "persons"; @Autowired protected PersonDao personDao = null; /** * Deletes a person. */ @RequestMapping(value="/person/delete.html") public ModelAndView delete(@RequestParam("id") Integer id) { Person person = new Person(); person.setId(id); personDao.delete(person); return new ModelAndView(SEARCH_VIEW_KEY, SEARCH_MODEL_KEY, search()); } /** * Searches for all persons and returns them in a * <code>Collection</code> as 'persons' in the * <code>ModelMap</code>. */ @RequestMapping(value="/person/search.html") @ModelAttribute(SEARCH_MODEL_KEY) public Collection<Person> search() { Collection<Person> lResults = personDao.findPersons(); return lResults; } /** * Creates new instance of <code>Person</code>. */ public Person newPerson() { return new Person(); } }
Example 2. PersonFlowHandler
At the end of the flow and when exception occurs that the flow doesn't handle, the PersonFlowHandler
redirects to the search page.
@Component public class PersonFlowHandler extends AbstractFlowHandler { /** * Where the flow should go when it ends. */ @Override public String handleExecutionOutcome(FlowExecutionOutcome outcome, HttpServletRequest request, HttpServletResponse response) { return getContextRelativeUrl(PersonController.SEARCH_VIEW_KEY); } /** * Where to redirect if there is an exception not handled by the flow. */ @Override public String handleException(FlowException e, HttpServletRequest request, HttpServletResponse response) { if (e instanceof NoSuchFlowExecutionException) { return getContextRelativeUrl(PersonController.SEARCH_VIEW_KEY); } else { throw e; } } /** * Gets context relative url with an '.html' extension. */ private String getContextRelativeUrl(String view) { return "contextRelative:" + view + ".html"; } }