我希望能够通过鼠标单击将文本框中输入的值传递给我的AJAX控制器。
控制器代码:
@EnableWebMvc
@Controller
public class HelloWorldController {
public static class User {
private String name, surname;
int age;
public User(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getSurname() {
return surname;
}
}
@RequestMapping("/hello")
public ModelAndView helloWorld() {
return new ModelAndView("home/hello.jsp", "message", "Spring MVC Demo");
}
@RequestMapping(value = "/hello/{name}", produces = "application/json")
public @ResponseBody User getUser(@PathVariable(value = "name") String name) {
return new User(name, "Surname", 25);
}
}
相关观点代码:
$.getJSON("hello/", {name: $('#username').val()} , function(obj) {
$("ul").append("<li>"+obj.name+"</li>");
});
// ...
<input type="text" name="username" id="username" >
所以这不起作用,当点击按钮时,没有任何反应。但是,当我将控制器更改为@RequestParam
时,它可以正常工作,但我希望它与@PathVariable
一起使用,以便显示正确的username
的网址。
问题出在哪里,我该如何解决?
答案 0 :(得分:0)
听起来是因为你正在使用GET方法传递你的HTTP请求,所以通过查询字符串传递参数(name)。
这就是为什么@RequestParam
有效而@PathVariable
无效。
如果您必须使用GET方法,请尝试按如下方式构建您的网址:
/hello/" + $('#username').val() + "/"
并且不会使用您的ajax请求传递数据。
尝试使用firebug或google开发人员工具,以查看要将哪些数据发送到服务器并返回到浏览器。
类似的东西:
$.getJSON(/hello/" + $('#username').val() + "/",
function(obj) {
$("ul").append("<li>"+obj.name+"</li>");
});