2012-09-14 19 views
6

Soy nuevo en el Spring Framework y he creado un controlador con el métodode forma mapeo primavera al controlador

@RequestMapping("/fetch/{contactId}") 
public String getContact(@PathVariable("contactId") Long contactId, 
     Map<String, Object> map, HttpServletRequest request, 
     HttpServletResponse response) { 

    Contact contact = contactService.get(contactId); 
    map.put("contact", contact); 
    return "contact"; 
} 

Este método fetch se llama para recuperar los datos de contacto cuando el usuario hace clic en el enlace en un JSP

<td><a href="fetch/${contact.id}" class="edit">Edit</a></td> 

a continuación, devuelve con éxito el objeto de contacto y muestra en la pantalla para el usuario para cambiar y guardar. La etiqueta del formulario de mi JSP es así

<form:form method="post" action="add.html" commandName="contact" 
     id="contact" onsubmit="return validateContact(this)"> 

Ahora el problema es cuando intento enviar la página a otro método en el mismo controlador de la URL cambia a

/miaplicacion/app/contactos/FETCH/add.html

mientras que debería ser

/myapp/app/contacts/add.html

Sé que hay algo que no estoy haciendo correctamente, pero qué es exactamente lo que no puedo descifrar. Apreciar si alguno de ustedes me podría ayudar a resolver el problema

Gracias AA

Respuesta

0

Uso /contacts/add.html en action atributo
Cambio

<form:form method="post" action="add.html" commandName="contact" 
     id="contact" onsubmit="return validateContact(this)"> 

a

<form:form method="post" action="/contacts/add.html" commandName="contact" 
     id="contact" onsubmit="return validateContact(this)"> 
7

Uso

<c:url var="addUrl" value="/contacts/add.html"/> 
<form:form method="post" action="${addUrl}" commandName="contact" 
     id="contact" onsubmit="return validateContact(this)"> 

En general, se recomienda utilizar c:url en cada aplicación interna en lugar del uso directo de la url en una etiqueta <a>.

+0

¿por qué se recomienda eso? – NimChimpsky

+0

@NimChimpsky c: url tiene alguna reescritura de url interna, por ejemplo, para la clave de sion (si las cookies no están enalbed/supported). Pero también algunas otras librerías piratean esta reescritura (creo que el tomcat CSRF-Filter también lo usa). Otra razón es que ha incluido la codificación url para las propiedades. – Ralph

+0

Tomcats: Descripción del filtro CSRF: http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CSRF_Prevention_Filter – Ralph

0
<form:form method="post" servletRelativeAction="/contacts/add" commandName="contact" 
     id="contact" onsubmit="return validateContact(this)"> 

Utilice el atributo servletRelativeAction para asignar a la acción del controlador deseado. Supongo que su controlador deseado se mapea como '/ contacts/add' no 'add.html'. Quieres golpear el controlador no la vista.

Cuestiones relacionadas