Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing model attribute during redirect in spring MVC and avoiding the same in URL

My objective is to pass model attributes from controller to JSP page during a redirect and avoid the attribute being displayed in URL. The source code below is validating login from datastore using java data objects.

Controller:

@Controller public class LoginController {     int count;     PersistenceManager pm = PMF.get().getPersistenceManager();      //Instance of data class         User user;     ModelAndView modelAndView=new ModelAndView();      @RequestMapping(value="/Login",method = RequestMethod.POST)     public ModelAndView loginValidate(HttpServletRequest req){          //Getting login values         String uname=req.getParameter("nameLogin");         String pswd1=req.getParameter("pswdLogin");         count=0;           user=new User();          //Generating Query         Query q = pm.newQuery(User.class);         q.setFilter("userName == userNameParam");         q.declareParameters("String userNameParam");          try{             List<User> results = (List<User>) q.execute(uname);               for (User u: results) {                  String userName=u.getUserName();                  if(userName.equals(uname)){                      System.out.println(u.getPassword());                      if(u.getPassword().equals(pswd1)){                         count=count+1;                         modelAndView.setViewName("redirect:welcome");                         modelAndView.addObject("USERNAME",uname);                         return modelAndView;                      }          //rest of the logic      } 

JSP:

 <h1>Welcome ${USERNAME} </h1> 

My current URL is /welcome?USERNAME=robin
My goal is to display it as /welcome
Also, my page is supposed to display "Welcome robin" whereas it displays only Welcome.

like image 315
Chandni Avatar asked Jun 19 '14 07:06

Chandni


People also ask

What is the difference between forward and redirect in Spring MVC?

Forward: is faster, the client browser is not involved, the browser displays the original URL, the request is transfered do the forwarded URL. Redirect: is slower, the client browser is involved, the browser displays the redirected URL, it creates a new request to the redirected URL.

How do I redirect a spring boot to another URL?

There are two ways you can do this. Two using RedirectView object. The return type of the method should be ResponseEntity<Void>. STEP2: Build response entity object with 302 http status code and the external URL.

What is the use of model addAttribute () in spring?

Furthermore, there's also an addAttributes() method. Its purpose is to add values in the Model that'll be identified globally. That is, every request to every controller method will return a default value as a response.

What is the use of redirect in Spring MVC?

Using the redirect prefix in your controller will generate a HTTP response with the 302 status code and the location header pointing to the redirection URL. The browser will then redirect to that URL (model exposed in the first request will be lost, and the browser URL will be the second one).


1 Answers

RedirectAttributes only work with RedirectView, please follow the same

@RequestMapping(value="/Login",method = RequestMethod.POST) public RedirectView loginValidate(HttpServletRequest req, RedirectAttributes redir){ ...      redirectView= new RedirectView("/foo",true);     redir.addFlashAttribute("USERNAME",uname);     return redirectView; } 

Those flash attributes are passed via the session (and are destroyed immediately after being used - see Spring Reference Manual for details). This has two interests :

  • they are not visible in URL
  • you are not restricted to String, but may pass arbitrary objects.
like image 66
Serge Ballesta Avatar answered Oct 04 '22 07:10

Serge Ballesta