17

私は春のmvcが初めてです。簡単なログインアプリケーションを作成しました。しかし、私の場合、URLを投稿してコントローラーメソッドを正しく呼び出すのは初めてです。2回目は、もう1回コントローラーでパスを追加しています。最初の投稿: //localhost:8090/springmvc/account/login同じページでの 2 回目の投稿: //localhost:8090 /springmvc/account/account/login。このリダイレクトの問題を解決するにはどうすればよいですか?

これは私のコントローラーページです:

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

この私の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>

共通ページにタグライブラリを使用しました:

<%@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>
4

4 に答える 4

26

使用している Spring のバージョンに応じて、いくつかのオプションがあります。

Spring 3.1 以前または Spring 3.2.3 以降

コンテキスト パスに固有の URL/アクションのルート相対が必要です。

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

注: Spring 3.2.3 が導入されservletRelativeActionましたが、使用したことはありません。

春 3.2

何もしないでください。コンテキスト パスが先頭に追加されます。これは実際には重大な変更であり、最終的にはロールバックされました。

<form:form action="/account/login" method="post"> 
//will produce action="/springmvc/account/login"
于 2013-09-05T12:56:09.713 に答える
8

でフォームアクションを開始します/

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

これを行わないと、アドレス バーの既存の URL にアクションを追加するようにブラウザーに指示することになります。

また、(Spring の を使用せずに) HTML に直接そのようなリンクがある場合はform:form、 を使用c:urlして、コンテキスト パスなどを含む URL を適切に構築するようにしてください。これにより、適切な相対 URL を構築する手間が大幅に軽減されます。

<a href="<c:url value="/account/register" />">Register</a>
于 2013-09-05T08:19:52.163 に答える