Puedo usar MVC de Spring. Necesito agregar el atributo de la solicitud o de otro objeto. Debe ser el mensaje que se mostrará en la pantalla. Por ejemplo, si yo uso puro Servlets me puede decir simplemente:

request.setAttribute("message", "User deleted");

y que en la página JSP

<div id="message">${message}</div>

pero cuando trato de hacer algo como esto en el método:

@RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
        ModelMap map, HttpServletRequest request)

Modelo objeto –

model.addAttribute("message", "User deleted");

Mapa –

map.put("message", "User deleted");

ModelMap –

map.put("message", "User deleted");

HttpServletRequest –

request.setAttribute("message", "User deleted");

no muestra nada. Pero en mi navegador puedo ver: http://localhost : 8081 /proyecto/index?mensaje=Usuario+eliminados

Cómo resolver este pequeño problema?
Gracias por sus respuestas

Actualizado:

para la clara comprensión de que yo trate de hacer esto:

 @RequestMapping(value = "/delete", method = RequestMethod.GET)
public String deleteUser(@RequestParam("login") String login,
        Model model) {
    dao.delete(login); //there is NO exeptions
    map.addAttribute("message", "User " + login + " deleted");
    return "redirect:" + "index";
}

en mi JSP yo también pantalla de inicio de sesión de usuario de esta forma:

${user.login}

toma de usuario de la Sesión y la veo de inicio de sesión

Cómo utiliza usted la solicitud de atributos? En un JSP?
¿Qué es PATH_REDIRECT‘s valor?
es de redireccionamiento»:». Creo que el problema está en esta redirección. Entonces, ¿cómo puedo redirigir y enviar el mensaje?
Sí, eso cambia las cosas. Ver las respuestas abajo.

OriginalEl autor Cat H | 2013-09-24

3 Comentarios

  1. 16

    Con la nueva información, el problema es redirect:. Cuando haces una redirección, envía una respuesta HTTP con un 302 (o 301) código de respuesta con un Location encabezado apuntando a la nueva dirección url. El navegador va a hacer una nueva petición HTTP a esa ubicación. Como tal, su solicitud de atributos (y el modelo de atributos) no son buenos, que no existen en la nueva solicitud.

    Considerar el uso de flash atributos. El RedirectAttributes clase es el camino a seguir. El javadoc tiene un buen ejemplo.


    Un Model atributo se agrega a la solicitud de atributos mucho más tarde durante el proceso de solicitud. Por lo tanto, no se verá directamente haciendo este

    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public String deleteUser(@RequestParam("login") String login,
            ModelMap map, HttpServletRequest request)
        map.put("message", "User deleted");
        String message = (String) request.getAttribute("message"); //will return null
        ...
    }

    Sólo la confianza de que finalmente va a ser en la solicitud de atributos y por lo tanto está disponible en tu jsp.

    no ayuda. He actualizado el mensaje
    Sí!! Eso es todo! yo uso attr.addFlashAttribute(«mensaje», «Usuario eliminado») de RedirectAttributes objeto. Gracias
    Tengo una pregunta. ¿Cómo puedo realizar la misma en el más puro Servlets? (sin Resorte)
    La implementación subyacente utiliza HttpSession atributos. Con puro Servlets usted podría utilizar un Filter para agregar y quitar de la HttpSession atributos en cada solicitud. Hay un ejemplo de aquí.
    oh, muchas gracias!

    OriginalEl autor Sotirios Delimanolis

  2. 7

    Como son redirecting a una nueva URL, el navegador es en realidad el envío de una nueva solicitud a la redirect URL. Y el atributo de la solicitud map.addAttribute("message", "User " + login + " deleted"); no está presente en la nueva solicitud.

    Puede utilizar RedirectAttributes para mostrar la message para el usuario:

    @RequestMapping(value = "/delete", method = RequestMethod.GET)
    public String deleteUser(@RequestParam("login") String login,
            Model model,RedirectAttributes redirectAttributes) {
        dao.delete(login); //there is NO exeptions
        //map.addAttribute("message", "User " + login + " deleted");
        redirectAttributes.addFlashAttribute("message", "User " + login + " deleted");
        return "redirect:" + "index";
    }

    redirectAttributes.addAttribute construcciones de solicitud de parámetros fuera de sus atributos y la redirige a la página deseada con los parámetros de la petición. Y addFlashAttribute almacena los atributos en un flashmap (mantenido en la sesión del usuario y se retira una vez que la próxima redirige la solicitud se presenta cumplió).

    por desgracia, esto no funciona… no sé por qué. Así como la última vez, veo en el navegador: http:// localhost : 8081 /proyecto/index?mensaje=Usuario+ololo+eliminados
    intente esto : <c:out value="${message}" />
    Usted necesidad de utilizar addFlashAttribute.
    Gracias por tu respuesta. Pero en mi caso tengo que llamar a addFlashAttribute método de RedirectAttributes clase
    editado mi ans. cambiado a addFlasAttribute

    OriginalEl autor Debojit Saikia

  3. 0

    La redirección en un camino equivocado. en lugar de volver «redirect:»+»índice» uso retorno «redirect:/índice». redirigir a su método get. como redirectattributes son post/redirect/get atributo. pruebe esto y usted recibirá un mensaje de flash en la pantalla.
    en lugar de un Modelo de uso Redirectattributes.

    redirectAttributes.addFlashAttribute(«errormsg», «errormessage»);
    de retorno «redirect:/index.hacer»;

    OriginalEl autor James

Dejar respuesta

Please enter your comment!
Please enter your name here