java - que - spring mvc netbeans
Pasando el atributo del modelo durante la redirección en Spring MVC y evitando lo mismo en la URL (3)
Debe utilizar la función de atributos flash de Spring MVC. Cuando desea que se pueda acceder a los datos después de una redirección, no los agregue al modelo ( Model
, ModelMap
o ModelAndView
) sino a los ModelAndView
de RedirectAttributes
que obtiene como parámetro en su método de controlador.
@RequestMapping(value="/Login",method = RequestMethod.POST)
public ModelAndView loginValidate(HttpServletRequest req, RedirectAttributes redir){
...
modelAndView.setViewName("redirect:welcome");
redir.addFlashAttribute("USERNAME",uname);
return modelAndView;
}
Esos atributos flash se pasan a través de la sesión (y se destruyen inmediatamente después de ser utilizados; consulte el Manual de referencia de Spring para obtener más detalles). Esto tiene dos intereses:
- no son visibles en URL
- no está restringido a Cadena, pero puede pasar objetos arbitrarios.
Soy un novato en primavera
He buscado web y publicaciones relacionadas en stackoverflow también. No encontré el que realmente necesito.
Mi objetivo es pasar los atributos del modelo del controlador a la página jsp durante una redirección y evitar que el atributo se muestre en la URL.
Lo siguiente es validar el inicio de sesión desde el almacén de datos usando jdo.
Mi controlador:
@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>
Mi URL es /welcome?USERNAME=robin
Mi objetivo es mostrarlo como /welcome
Además, se supone que mi página muestre "Welcome robin" mientras que solo muestra Bienvenido. Por favor, hágamelo saber cómo puedo resolverlo.
¡Gracias por adelantado!
Debes tener cuidado aquí porque creo que lo que estás tratando de hacer no es compatible por una buena razón. La directiva "redirigir" emitirá una solicitud GET a su controlador. La solicitud GET solo debe recuperar el estado existente usando los parámetros de solicitud, este es el contrato del método. Esa solicitud GET no debe basarse en una interacción previa ni en ningún objeto almacenado en algún lugar de la sesión como resultado de ello. La solicitud GET está diseñada para recuperar el estado existente (persistido). Su solicitud original ( POST ) debería haber persistido todo lo que necesita para su solicitud GET para recuperar un estado.
Los atributos de Redirect no están diseñados para apoyarlo en este caso, e incluso si logró usarlo correctamente, solo funcionará una vez y luego se destruirán. Si luego actualiza el navegador, obtendrá un error de aplicación porque ya no puede encontrar sus atributos.
Todos los objetos que se envían utilizando la redirección pueden pasarse en la propia URL desde el controlador como:
String message = "Hi Hello etc etc"
return new ModelAndView("redirect:" + "welcome", "message", message);
Esta variable de mensaje estará disponible en la URL como una solicitud GET -
http://localhost:8080/Demo/welcome?message=Hi Hello etc etc
Ahora puede acceder a la variable en su JSP a través de Scriptlet -
<%= request.getParameter("message") %>