AbstractWizardFormController使用Annotated @Controllers

在Spring Framework中, AbstractWizardFormController似乎已被弃用。 如何在Spring MVC Framework中实现多个页面。 (我不使用webflow)

任何示例或指针都有助于考虑我在Spring中的有限知识。

@Controller是一种更灵活的方式来定义表单/向导。 您应该根据请求的路径/请求参数/请求方法将方法映射到请求。 因此,您可以根据需要定义视图列表并根据某些必需的“步骤”参数处理请求,而不是定义视图列表,也可以根据需要定义向导的步骤(命令对象也将更透明地处理)。 以下是如何模拟经典的AWFCfunction(这只是一个例子,你可以做更多的事情)。

 @Controller @RequestMapping("/wizard.form") @SessionAttributes("command") public class WizardController { /** * The default handler (page=0) */ @RequestMapping public String getInitialPage(final ModelMap modelMap) { // put your initial command modelMap.addAttribute("command", new YourCommandClass()); // populate the model Map as needed return "initialView"; } /** * First step handler (if you want to map each step individually to a method). You should probably either use this * approach or the one below (mapping all pages to the same method and getting the page number as parameter). */ @RequestMapping(params = "_step=1") public String processFirstStep(final @ModelAttribute("command") YourCommandClass command, final Errors errors) { // do something with command, errors, request, response, // model map or whatever you include among the method // parameters. See the documentation for @RequestMapping // to get the full picture. return "firstStepView"; } /** * Maybe you want to be provided with the _page parameter (in order to map the same method for all), as you have in * AbstractWizardFormController. */ @RequestMapping(method = RequestMethod.POST) public String processPage(@RequestParam("_page") final int currentPage, final @ModelAttribute("command") YourCommandClass command, final HttpServletResponse response) { // do something based on page number return pageViews[currentPage]; } /** * The successful finish step ('_finish' request param must be present) */ @RequestMapping(params = "_finish") public String processFinish(final @ModelAttribute("command") YourCommandClass command, final Errors errors, final ModelMap modelMap, final SessionStatus status) { // some stuff status.setComplete(); return "successView"; } @RequestMapping(params = "_cancel") public String processCancel(final HttpServletRequest request, final HttpServletResponse response, final SessionStatus status) { status.setComplete(); return "canceledView"; } } 

我尝试改变方法签名,以便您可以了解我提到的灵活性。 当然,还有更多内容:您可以在@RequestMapping使用请求方法(GET或POST),您可以定义使用@InitBinder注释的方法等。

编辑:我有一个未映射的方法,我修复了(顺便说一句,你需要确保你没有模糊的映射 – 可以映射到多个方法的请求 – 或未映射的请求 – 不能的请求映射到任何方法)。 还要看一下@SessionAttributes,@ SessionStatus和@ModelAttribute,它们也是完全模拟经典AWFC行为所必需的(我已编辑代码以使其清晰)。