복붙노트

[SPRING] 주석이 달린 @Controller를 사용하는 AbstractWizardFormController

SPRING

주석이 달린 @Controller를 사용하는 AbstractWizardFormController

Spring Framework에서, AbstractWizardFormController는 더 이상 사용되지 않습니다. Spring MVC 프레임 워크에서 여러 페이지 양식을 구현하는 방법. (나는 웹 플로우를 사용하지 않는다)

모든 예제 또는 포인터는 Spring 내 제한된 지식을 고려하는 데 도움이됩니다.

해결법

  1. ==============================

    1.@Controller는 폼 / 마법사를보다 유연하게 정의 할 수있는 방법입니다. 요청 된 경로 / 요청 매개 변수 / 요청 메소드를 기반으로 요청에 메소드를 매핑해야합니다. 따라서보기 목록을 정의하고 필요한 "단계"매개 변수를 기반으로 요청을 처리하는 대신 원하는대로 마법사의 단계를 정의 할 수 있습니다. 또한 명령 개체가보다 투명하게 처리됩니다. 고전적인 AWFC 기능을 에뮬레이트하는 방법은 다음과 같습니다 (이 예는 단지 하나의 예일 뿐이며 훨씬 더 많이 할 수 있습니다).

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

    내가 언급 한 유연성에 대한 아이디어를 얻을 수 있도록 메소드 서명을 변경하려고했습니다. 물론 훨씬 더 많은 것이있다 : @RequestMapping에서 요청 메소드 (GET 또는 POST)를 사용할 수 있고, @InitBinder 등으로 주석이 달린 메소드를 정의 할 수있다.

    수정 : 내가 수정 한 매핑되지 않은 방법을했다 (그건 그렇고, 당신은 모호한 매핑이 필요하지 않도록해야합니다 - 하나 이상의 방법에 매핑 될 수있는 요청 - 또는 매핑되지 않은 요청 - 수없는 요청 모든 메소드에 맵핑 됨). 또한 @SessionAttributes, @SessionStatus 및 @ModelAttribute를 살펴보십시오.이 태그는 기존 AWFC의 동작을 완전히 시뮬레이트하는데도 필요합니다.

  2. from https://stackoverflow.com/questions/4623667/abstractwizardformcontroller-using-annotated-controllers by cc-by-sa and MIT license