2013-09-05 11 views
12

sono nuovo alla molla in PVC. Ho creato una semplice applicazione di accesso. ma nel mio caso la prima volta l'url per postare e chiamare il metodo controller correttamente. in un secondo tempo è un percorso in più con un altro tempo di controller. prima volta: // localhost: 8090/springmvc/account/login secong nella stessa pagina: // localhost: 8090/springmvc/account/account/login. come posso risolvere questo problema di reindirizzamento?Spring MVC: percorso URL in coda quando si invia il modulo

questa mia pagina controllore:

@Controller 
@RequestMapping("account") 
public class AccountController { 
    AccountService service = new AccountService(); 
    @RequestMapping(value = "account/default", method = RequestMethod.GET) 
    public ModelAndView RegisterUser() { 
     return new ModelAndView("/Account/Index","command",new User()); 
    } 

    @RequestMapping(value = "/registeruser", method = RequestMethod.POST) 
    public ModelAndView RegisterUser(User user) { 
     user.setMessage(service.Register(user)); 
     return new ModelAndView("/Account/Index", "command", user); 
    } 

    @RequestMapping(value = "/register", method = RequestMethod.POST) 
    public ModelAndView RegisterUer(User user) { 
     user.setMessage(service.Register(user)); 
     return new ModelAndView("/Account/create", "command", user); 
    } 

    @RequestMapping(value = "/login", method = RequestMethod.POST) 
    public ModelAndView LoginUser(User user, ModelMap model) { 
     String msg = service.isAuthendicated(user) ? "Logged in" : "Failed"; 
     user.setMessage(msg); 
     return new ModelAndView("/Account/Index", "command", user); 
    } 
} 

questa mia pagina jsp:

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%> 

<t:genericpage> 
    <jsp:body> 
     <h2>Login</h2> 
     <div> 
      ${command.message} </div> 
     <a href="account/register">Register</a> 
    <form:form action="account/login" method="post"> 
     <div> 
       <form:input path="username" /> 
      </div> 
     <div> 
       <form:input path="password" /> 
      </div> 
     <input type="submit" value="Login"> 
    </form:form> 
    </jsp:body> 
</t:genericpage> 

ho usato la libreria di tag per la pagina di comuni:

<%@tag description="Master Page" pageEncoding="UTF-8"%> 
<html> 
<body> 
    <div id="pageheader"> 
     <h2>WElcome</h2> 
    </div> 
    <div id="body"> 
     <jsp:doBody /> 
    </div> 
    <div id="pagefooter"> 
     <p id="copyright">Copyright</p> 
    </div> 
</body> 
</html> 

risposta

24

A seconda della versione di Primavera si sta utilizzando, qui ci sono alcune opzioni:

Primavera 3.1 e inferiore o in primavera 3.2.3 e superiori

Si dovrebbe avere gli URL/azioni relative alla radice specifiche del tuo percorso di contesto.

<form:form action="${pageContext.request.contextPath}/account/login" method="post"> 

Nota: Primavera 3.2.3 ha introdotto servletRelativeAction ma non ho mai usato.

Primavera 3.2

Non fare nulla, percorso del contesto viene anteposta - questo era in realtà un breaking change and eventually rolled back.

<form:form action="/account/login" method="post"> 
//will produce action="/springmvc/account/login" 
7

Avviare il form action con un /.

<form:form action="/account/login" method="post"> 

Non facendolo, stai dicendo al browser per aggiungere l'azione all'URL già esistente sulla barra degli indirizzi.

E dove si dispone di tali collegamenti direttamente in HTML (non usando Primavera di form:form), provare a utilizzare c:url per costruire correttamente l'URL incluso il percorso del contesto ecc Questo richiede un sacco di dolore di distanza dalla costruzione di URL relativi adeguate.

<a href="<c:url value="/account/register" />">Register</a> 
+1

se sto usando/beofre il link azione come significa navigatore web non prendendo il nome dell'applicazione nella url percorso come questo // localhost: 8090/account/login – manivannan

+2

Prova il 'c: url' quindi – adarshr

Problemi correlati