복붙노트

[SPRING] Spring RedirectView에서 어떻게 addObject를 할 것인가?

SPRING

Spring RedirectView에서 어떻게 addObject를 할 것인가?

나는 Spring을 처음 접했고 ModelAndView에서와 같이 RedirectView에 addOject를 추가하는 방법을 알고 싶습니다.이 뷰에서 사용할 수있는 객체를 추가 할 수 있습니다.

 mnv = new ModelAndView( FORM_URL );
        mnv.addObject( "wpassbook", passbook );
        return mnv;


RedirectView redirectView = new RedirectView( "/credit" + FORM_URL );
        return new ModelAndView( redirectView );

어쨌든 여기 전체적인 방법이 있습니다 :

    /**
 * Accepts POST request for this resource url.
 * 
 * @param formBean bean containing values entered by the user
 * @param bindingResult contains validation failure messages if form bean is invalid
 * @param request instance of HttpServletRequest created by the container
 * @return the presentation layer & model object with errors to be rendered if validation fails, if successful a
 *         redirect is done.
 */
@RequestMapping( value = { FORM_URL }, method = RequestMethod.POST )
public ModelAndView processData( @ModelAttribute( "bean" ) @Valid final HostFinancialRequest formBean,
                                 final BindingResult bindingResult, HttpServletRequest request, @RequestParam("passbook") String passbook )
{
    ModelAndView mnv = null;

    if ( request.getSession() == null )
    {
        mnv = new ModelAndView( "timeout.jsp" );
        // display session timeout page
        // add session timeout message error
        mnv.addObject( DepositsControllerUtil.VAR_ERROR_MESSAGE,
                       ErrorCode.BDS_USER_SESSION_TIMEOUT.getDescription() );
        return mnv;
    }

    // check if validation failed
    if ( bindingResult.hasErrors() )
    {
        mnv = new ModelAndView( FORMVIEW );
        // check if teller override boolean flag is to be enabled
        DepositsControllerUtil.checkTellerOverrideError( mnv, bindingResult );
        // add static values
        loadDefault( mnv.getModelMap() );
        // return to presentation layer with model that contains errors
        return mnv;
    }

    /* ======== Validation if successful, continue processing then do a redirect======= */

    // add required fields
    fieldGenerator.populateConstantHeader( formBean, request );

    // save transaction
    Journal journal = journalManagerImpl.saveJournal( formBean );

    // convert the id to be code before sending to host
    Currency currency = currencyManagerImpl.get( journal.getCurrency().getCurrCode() );
    formBean.setCurrency( Integer.valueOf( currency.getCurrCode() ) );

    // send to host
    Map<String, Object> returnMap = hostConnectionDelegate.invoke( formBean, wsBean );

    // get response from the returned map
    HostRequest response = HostConnectionDelegateUtil.getHostResponse( returnMap );

    accountPostingValidator.validate( response, bindingResult );

    // check if validation failed
    if ( bindingResult.hasErrors() )
    {
        mnv = new ModelAndView( FORMVIEW );
        // check if teller override boolean flag is to be enabled
        DepositsControllerUtil.checkTellerOverrideError( mnv, bindingResult );
        // add static values
        loadDefault( mnv.getModelMap() );

        mnv.addObject( "postingRestrictionCode", response.getPostingRestrictionCode() );
        // return to presentation layer with model that contains errors
        return mnv;

    }
    else
    {
        // update transaction table based on host response
        if ( !HostConnectionDelegateUtil.isApproved( response ) )
        {
            journal.setErrorCode( response.getErrorCode() );
            journal.setStatus( response.getStatus() );
        }
        else
        {
            journal.setStatus( response.getStatus() );

        }
        // save journal
        journalManagerImpl.saveJournal( journal );

        if ( request.getSession() != null )
        {
            // add response to session for the presentation layer to display
            // transaction results.
            request.getSession().setAttribute( "bean", response );
        }

        RedirectView redirectView = new RedirectView( "/credit" + FORM_URL );
        return new ModelAndView( redirectView );
    }

}

아래 코드에서 위의 코드를 구현하고 싶습니다.

TIA.

해결법

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

    1.리디렉션을 통해 데이터를 전달하려면 RedirectAttributes.addFlashAttribute (key, value)를 사용합니다.

    리디렉션을 통해 데이터를 전달하려면 RedirectAttributes.addFlashAttribute (key, value)를 사용합니다.

    문서에서 :

    public ModelAndView processData(
        @Valid final HostFinancialRequest formBean,
        final BindingResult bindingResult, 
        HttpServletRequest request, 
        @RequestParam String passbook,
        RedirectAttributes redirectAttributes) {
    
        // do work an then setup the redirect attributes
    
        redirectAttributes.addFlashAttribute("key", value);
    
        return new ModelAndView("redirect:/credit" + FORM_URL);
    }
    
  2. from https://stackoverflow.com/questions/24668988/how-do-i-addobject-in-spring-redirectview by cc-by-sa and MIT license