2012-09-14 13 views
6

Jestem nowy na Spring Framework i ja stworzyliśmy kontroler metodąWiosna Form mapowanie do kontrolera

@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"; 
} 

Ten sposób pobierania nazywa się odzyskać dane kontaktowe, gdy użytkownik kliknie na link na jsp

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

Następnie pomyślnie zwraca obiekt kontaktu i wyświetla na ekranie, aby użytkownik mógł zmienić i zapisać. Znacznik forma mojego JSP jest jak ten

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

Teraz problem jest gdy próbuję przesłać stronę do innej metody w tym samym kontrolerze zmiany adresu URL do

/myapp/app/Kontakt/pobrania/add.html

podczas gdy powinno być

/myapp/app/contacts/add.html

Wiem, że jest coś, czego nie robię poprawnie, ale czego dokładnie nie jestem w stanie wymyślić. Wdzięczni, jeśli ktoś z was może mi pomóc rozwiązać ten problem

Dzięki AA

Odpowiedz

0

Korzystając /contacts/add.html w action atrybutu
Zmień

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

do

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

Korzystając

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

Ogólnie zaleca się używanie c:url w każdej aplikacji wewnętrznej zamiast bezpośredniego używania adresu URL w tagu <a>.

+0

Dlaczego to jest polecane? – NimChimpsky

+0

@NimChimpsky c: url ma pewne wewnętrzne przepisanie URL-a, na przykład dla klawisza widza (jeśli ciasteczka nie są enalbowane/obsługiwane). Ale niektóre inne biblioteki włamują się do tego przepisywania (myślę, że filtr CSRF tomcat też go używa). Innym powodem jest to, że zawiera kodowanie adresu URL dla właściwości. – Ralph

+0

Tomcats: Filtr CSRF Opis: 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)"> 

Użyj atrybutu servletRelativeAction, aby odwzorować żądaną akcję kontrolera. Zakładam, że żądany kontroler jest mapowany jako "/ contacts/add", a nie "add.html". Chcesz trafić kontroler, a nie widok.

Powiązane problemy