0

JavaEE アプリケーションがあり、ユーザーをデータベースに追加するための jquery フォームがあります。fiekd 値を Spring コントローラーに送信しましたが、何らかの理由でデータが送信されません。どうした?

ログに次の例外が表示されます

java.lang.IllegalStateException: Could not find @PathVariable [login] in @RequestMapping

<div id="dialog-form" title="Create new user">
<p class="validateTips">All form fields are required.</p>
<form:form action="${pageContext.request.contextPath}/test" method="post">
    <fieldset>
        <label for="login">Login</label>
        <input type="text" name="login" id="login" class="text ui-widget-content ui-corner-all" />
        <label for="password">Password</label>
        <input type="text" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />            
        <label for="email">Email</label>
        <input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" />
 </fieldset>
</form:form>
</div>
<button id="create-user">Add user</button>

脚本

$( "#dialog-form" ).dialog({
            autoOpen: false,
            height: 600,
            width: 350,
            modal: true,
            buttons: {
                "Create an account": function() {
                    var login = $( '#login' );
                    var email = $( '#email' );
                    var  password = $( '#password' );
                    $.ajax({
                                type: "POST",
                                url: "${pageContext.request.contextPath}/test",
                                data: "login=" + login + "&email=" + email + "&password="+ password,
                                success: function(){
                                    $( this ).dialog( "close" );
                                }
                    })

コントローラ

@RequestMapping(value="/test", method=RequestMethod.POST)
@ResponseBody
public void test(@PathVariable String login, @PathVariable String password, @PathVariable String email) {
    User user = new User();
    user.setLogin(login);
    user.setPassword(password);
    user.setEmail(email);
    userService.create(user);
}
4

2 に答える 2

0

@PathVariableURL「REST Style」に埋め込まれた情報用です。例えば、:

@RequestMapping(value="/test/user/{login}/password/{password}/email/{email}", method=RequestMethod.POST)

クエリ文字列または投稿本文にある通常の古い http パラメータを読み込むには、注釈は@RequestParamではなく です@PathVariable

public void test(@RequestParam("login") String login, @RequestParam("password") String password, @RequestParam("email") String email) {

また、あなたのajaxではdata、データが期待されています。クエリ文字列としてフォーマットする場合は、URL に直接追加する必要があります。それを本体に入れるには、次のようにします。

data: {login:login ,email: email,password: password}

クエリ文字列としてフォーマットするのではなく。form タグでjQuery のメソッドを使用するだけ.serialize()で、送信ボタンがクリックされたかのようにフォーム全体を簡単に送信することもできます。

于 2013-08-21T08:23:18.603 に答える
-1

これは POST リクエストであるため、@PathVariable の代わりに @RequestParam を使用する必要があります

@PathVariable は GET リクエスト用です

于 2013-08-21T08:23:56.240 に答える