web-dev-qa-db-fra.com

Spring MVC: chemin de l'URL ajouté lors de la publication du formulaire

je suis nouveau au printemps MVC. J'ai créé une application de connexion simple. mais dans mon cas la première fois le pour poster url et appeler la méthode du contrôleur correctement. dans un deuxième temps, il ajoute un chemin avec une fois de plus du contrôleur. première publication: // localhost: 8090/springmvc/compte/login seconde dans la même page: // localhost: 8090/springmvc/compte/compte/login . Comment puis-je résoudre ce problème de redirection?

ceci ma page de contrôleur:

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

ceci ma page 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>

j'ai utilisé la bibliothèque de balises pour la page commune:

<%@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>
14
manivannan

Selon la version de Spring que vous utilisez, voici quelques options:

Spring 3.1 et inférieur OR Spring 3.2.3 et supérieur

Vous devez avoir vos URL/actions relatives relatives à la racine spécifiques à votre chemin de contexte.

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

Remarque: Spring 3.2.3 a introduit servletRelativeAction mais je ne l’ai jamais utilisé.

Spring 3.2

Ne faites rien, le chemin de contexte est préfixé - il s’agissait en fait d’un changement radical et finalement annulé .

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

Commencez votre action de formulaire avec un /.

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

En ne le faisant pas, vous indiquez au navigateur d'ajouter l'action à l'URL déjà existante dans la barre d'adresse.

Et lorsque vous avez ces liens directement en HTML (en n'utilisant pas le form:form de Spring), essayez d'utiliser c:url pour construire correctement l'URL, y compris le chemin du contexte, etc.

<a href="<c:url value="/account/register" />">Register</a>
7
adarshr

Utilisez ../ pour obtenir l'URL de votre racine de contexte actuelle:

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

de ici

0
Majid