Je suis un débutant au printemps
J'ai également consulté des publications Web et connexes dans stackoverflow. Je n'ai pas trouvé celui dont j'ai réellement besoin.
Mon objectif est de transmettre les attributs de modèle du contrôleur à la page jsp lors d’une redirection et d’éviter que l’attribut ne soit affiché dans une URL.
Ce qui suit valide la connexion depuis le magasin de données à l’aide de jdo.
Mon contrôleur:
@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>
Mon URL est /welcome?USERNAME=robin
Mon objectif est de l'afficher en tant que /welcome
De plus, ma page est supposée afficher "Welcome robin" alors qu’elle n’affiche que Welcome. S'il vous plaît laissez-moi savoir comment puis-je résoudre ce problème.
Merci d'avance!
Vous devez utiliser l'attribut flash facility de Spring MVC. Lorsque vous souhaitez que les données soient accessibles après une redirection, ne les ajoutez pas au modèle (Model
, ModelMap
ou ModelAndView
), mais à une RedirectAttributes
que vous obtenez comme paramètre dans votre méthode de contrôleur.
@RequestMapping(value="/Login",method = RequestMethod.POST)
public ModelAndView loginValidate(HttpServletRequest req, RedirectAttributes redir){
...
modelAndView.setViewName("redirect:welcome");
redir.addFlashAttribute("USERNAME",uname);
return modelAndView;
}
Ces attributs flash sont transmis via la session (et sont détruits immédiatement après leur utilisation - voir Spring Reference Manual pour plus de détails). Cela a deux intérêts:
Vous devez faire attention ici car je pense que ce que vous essayez de faire n’est pas pris en charge pour une bonne raison. La directive "redirect" émettra une requêteGETà votre contrôleur. La requêteGETdoit uniquement récupérer l'état existant à l'aide de paramètres de requête, il s'agit du contrat de méthode. CeGETrequestne devrait pass'appuyer sur une interaction précédente ou sur n'importe quel objet stocké quelque part dans la session à la suite.GETrequest est conçu pour récupérer l'état existant (persistant). Votre demande d'origine (POST) doit avoir conservé tout ce dont vous avez besoin pour vousOBTENEZdemande de récupération d'un état.
RedirectAttributes ne sont pas conçus pour vous aider dans ce cas, et même si vous parvenez à l'utiliser correctement, cela ne fonctionnera qu'une fois, puis ils seront détruits. Si vous actualisez ensuite le navigateur, vous obtiendrez une erreur d'application car il ne trouvera plus vos attributs.
Tous les objets envoyés en utilisant la redirection peuvent être passés dans l'URL elle-même depuis le contrôleur en tant que -
String message = "Hi Hello etc etc"
return new ModelAndView("redirect:" + "welcome", "message", message);
Cette variable de message sera disponible dans l'URL sous la forme d'une demande GET -
http://localhost:8080/Demo/welcome?message=Hi Hello etc etc
Vous pouvez maintenant accéder à la variable sur votre JSP via Scriptlet -
<%= request.getParameter("message") %>