Jquery不向Spring控制器发送数据

时间:2013-08-21 08:16:34

标签: java javascript jquery spring

我有一个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);
}

2 个答案:

答案 0 :(得分:0)

@PathVariable用于嵌入URL“REST Style”中的信息。 。e.g,:

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

而不是将其格式化为查询字符串。您也可以在表单标签上使用jQuery的.serialize()方法轻松发送整个表单,就像单击提交按钮一样。

答案 1 :(得分:-1)

由于它是POST请求,您必须使用@RequestParam而不是@PathVariable

@PathVariable用于GET请求