it-swarm.com.de

Übergeben des Modellattributs während der Umleitung im Frühjahr MVC und Vermeidung derselben in der URL

Ich bin ein Neuling im Frühling 
Ich habe auch im Web und verwandten Beiträgen in stackoverflow gesucht. Ich habe nicht das gefunden, das ich wirklich brauche.
Mein Ziel ist es, Modellattribute während einer Umleitung von der Jsp-Seite an die Jsp-Seite zu übergeben und zu vermeiden, dass das Attribut in der URL angezeigt wird.
Im Folgenden wird die Anmeldung vom Datastore mit jdo überprüft. 

Mein 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>

Meine URL lautet /welcome?USERNAME=robin
Mein Ziel ist es, es als /welcome anzuzeigen. 
Außerdem soll auf meiner Seite "Welcome Robin" angezeigt werden, während nur "Welcome" angezeigt wird. Bitte lassen Sie mich wissen, wie ich es lösen kann. 
Danke im Voraus!

19
Chandni

Sie sollten das Attribut flash von Spring MVC verwenden. Wenn Daten nach einer Umleitung verfügbar sein sollen, fügen Sie sie nicht dem Modell hinzu (Model, ModelMap oder ModelAndView), sondern einem RedirectAttributes, den Sie als Parameter in Ihrer Controller-Methode erhalten.

@RequestMapping(value="/Login",method = RequestMethod.POST)
public ModelAndView loginValidate(HttpServletRequest req, RedirectAttributes redir){
...

    modelAndView.setViewName("redirect:welcome");
    redir.addFlashAttribute("USERNAME",uname);
    return modelAndView;
}

Diese flash-Attribute werden über die Sitzung übergeben (und werden unmittelbar nach ihrer Verwendung zerstört - siehe Spring Reference Manual für Details). Dies hat zwei Interessen:

  • sie sind in URL nicht sichtbar
  • sie sind nicht auf String beschränkt, sondern können beliebige Objekte übergeben.
55
Serge Ballesta

Sie müssen hier vorsichtig sein, denn ich denke, was Sie zu tun versuchen, wird aus gutem Grund nicht unterstützt. Die Direktive "redirect" sendet eine Anforderung GET an Ihren Controller. Die Anforderung GET sollte nur den vorhandenen Status mithilfe der Anforderungsparameter abrufen. Dies ist der Methodenvertrag. Diese GET request sollte nicht verlassen sich auf eine vorherige Interaktion oder auf ein beliebiges Objekt, das irgendwo in der Sitzung als Ergebnis davon gespeichert wurde. GET -Anforderung soll vorhandenen (permanenten) Status abrufen. Ihre ursprüngliche Anforderung (POST) sollte alles beibehalten haben, was Sie für Ihre GET-Anforderung benötigen, um einen Status abzurufen. 

RedirectAttributes unterstützen Sie in diesem Fall nicht, und selbst wenn Sie es richtig verwenden konnten, wird es nur einmal funktionieren und dann werden sie zerstört. Wenn Sie dann den Browser aktualisieren, wird ein Anwendungsfehler angezeigt, da er Ihre Attribute nicht mehr finden kann.

5
DhafirNz

Alle Objekte, die per Weiterleitung gesendet werden, können vom Controller als URL übergeben werden.

String message = "Hi Hello etc etc"
return new ModelAndView("redirect:" + "welcome", "message", message);

Diese Nachrichtenvariable ist in URL als GET-Anforderung verfügbar.

http://localhost:8080/Demo/welcome?message=Hi Hello etc etc

Sie können jetzt auf die Variable in Ihrer JSP über Scriptlet zugreifen.

<%= request.getParameter("message") %>
2
devutkarsh