我在服务器端使用Spring MVC,但在其中一个页面中,我决定使用jQuery而不是默认的Spring验证来创建AJAX验证。 一切都很好,除非我必须进行远程验证以检查数据库中是否已存在“标题”。 对于javascript我有以下内容:
var validator = $("form").validate({
rules: {
title: {
minlength: 6,
required: true,
remote: {
url: location.href.substring(0,location.href.lastIndexOf('/'))+"/checkLocalArticleTitle.do",
type: "GET"
}
},
html: {
minlength: 50,
required: true
}
},
messages: {
title: {
required: "A title is required.",
remote: "This title already exists."
}
}
});
然后,我使用Spring-Json进行验证并给出响应:
@RequestMapping("/checkLocalArticleTitle.do")
public ModelAndView checkLocalArticleTitle(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Map model = new HashMap();
String result = "FALSE";
try{
String title = request.getParameter("title");
if(!EJBRequester.articleExists(title)){
result = "TRUE";
}
}catch(Exception e){
System.err.println("Exception: " + e.getMessage());
}
model.put("result",result);
return new ModelAndView("jsonView", model);
}
但是,这不起作用,并且永远不会验证字段“title”。 我认为这样做的原因是我以这样的方式回答:
{result:"TRUE"}
事实上,答案应该是:
{"TRUE"}
我不知道如何使用ModelAndView答案返回像这样的响应。
另一件不起作用的是“远程”验证的自定义消息:
messages: {
title: {
required: "A title is required.",
remote: "This title already exists."
}
},
所需的消息有效,但远程消息无效。 我环顾四周,但我没有看到很多人同时使用Spring和jQuery。至少,不要与jQuery远程valdations和Spring-Json混合使用。 我很感激这里的一些帮助。
答案 0 :(得分:3)
我遇到了同样的问题。
现在我做了
@RequestMapping(value = "/brand/check/exists", method = RequestMethod.GET)
public void isBrandNameExists(HttpServletResponse response,
@RequestParam(value = "name", required = false) String name)
throws IOException {
response.getWriter().write(
String.valueOf(Brand.findBrandsByName(name).getResultList()
.isEmpty()));
}
可能不是一个好的解决方案。但无论如何,这很有效。
如果有更好的方法,请告诉我:)
<强>更新强>
在Spring 3.0中,我们可以使用@ResponseBody来执行此操作
@RequestMapping(value = "/brand/exists/name", method = RequestMethod.GET)
@ResponseBody
public boolean isBrandNameExists(HttpServletResponse response,
@RequestParam String name) throws IOException {
return Brand.findBrandsByName(name).getResultList().isEmpty();
}
答案 1 :(得分:1)
这是Spring MVC jQuery远程验证的另一个例子,用于检查用户的唯一性。 参数作为json传递,服务器返回boolean。
JS:
$('#user-form').validate({ // initialize the plugin
rules: {
username: {
required: true,
remote: function() {
var r = {
url: 'service/validateUsernameUnique',
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{"username": "' + $( "#username" ).val() + '"}'
}
return r;
}
},
},
messages: {
username: {
remote: jQuery.format("User {0} already exists")
}
}
});
Spring控制器:
@RequestMapping(value="/AdminUserService/validateUsernameUnique", method = RequestMethod.POST)
public @ResponseBody boolean validateUsernameUnique(@RequestBody Object username) {
@SuppressWarnings("unchecked")
String name = ((LinkedHashMap<String, String>)username).get("username");
return userService.validateUsernameUnique(name);
}