Подтвердить что ты не робот

AbstractWizardFormController с помощью аннотированных @Controllers

В Spring Framework, AbstractWizardFormController кажется устаревшим. Как реализовать несколько страниц в Spring MVC Framework. (Я не использую веб-поток)

любой пример или указатель поможет рассмотреть мои ограниченные знания в Spring.

4b9b3361

Ответ 1

A @Controller - более гибкий способ определения формы/мастера. Вы должны отображать методы для запросов на основе запрошенных параметров/параметров запроса/запроса. Поэтому вместо определения списка представлений и обработки запроса на основе некоторого требуемого параметра "шаг" вы можете определить шаги своего мастера, как вы пожелаете (также объект управления будет обработан более прозрачно). Здесь вы можете подражать классической функциональности AWFC (это только пример, там гораздо больше можно сделать).

@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";
    }

}

Я попытался изменить сигнатуры метода, чтобы вы могли получить представление о гибкости, о которой я говорил. Конечно, есть еще много чего: вы можете использовать метод запроса (GET или POST) в @RequestMapping, вы можете определить метод, аннотированный с помощью @InitBinder и т.д.

EDIT: У меня был неотображенный метод, который я исправил (кстати, вам нужно убедиться, что у вас нет двусмысленных сопоставлений - запросы, которые могут быть сопоставлены более чем одному методу - - или неотображаемые запросы - запросы, которые нельзя сопоставить с каким-либо методом). Также посмотрите на @SessionAttributes, @SessionStatus и @ModelAttribute, которые также необходимы для полного моделирования поведения классического AWFC (я уже редактировал код, чтобы это было ясно).