How do I addObject in Spring RedirectView

modelandview, spring

Solution

To carry data across a redirect use `RedirectAttributes.addFlashAttribute(key, value)`.

From the doc:

A RedirectAttributes model is empty when the method is called and is never used unless the method returns a redirect view name or a RedirectView.

After the redirect, flash attributes are automatically added to the model of the controller that serves the target URL.

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);
}

Problem

I'm kinda new to Spring and I'd like to know how to addOject in RedirectView just like in ModelAndView where I can add objects that can be used in views. ``` mnv = new ModelAndView( FORM_URL ); mnv.addObject( "wpassbook", passbook ); return mnv; RedirectView redirectView = new RedirectView( "/credit" + FORM_URL ); return new ModelAndView( redirectView ); ``` Anyway, here is the whole method: ``` /** * 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 ); } } ``` I'd like to implement the codes above in the method below. TIA.

Original source