Spring MVC jQuery远程验证

我在服务器端使用Spring MVC,但是在其中一页中,我决定使用jQuery创建AJAX验证,而不是使用默认的Spring验证.
一切正常,除非我必须进行远程验证以检查数据库中是否已经存在“标题”.
对于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);
}

但是,这不起作用,并且永远不会验证“标题”字段.
我认为这样做的原因是我以以下方式返回了答案:

{result:"TRUE"}

实际上,答案应该是:

{"TRUE"}

我不知道如何使用ModelAndView答案返回像这样的单个响应.

另一个不起作用的是用于“远程”验证的自定义消息:

    messages: {
        title: {
            required: "A title is required.",
            remote: "This title already exists."
        }
    },

必需的消息有效,但远程消息无效.
我环顾四周,但没有看到很多人同时使用Spring和jQuery.至少,不要与jQuery远程评估和Spring-Json混合使用.
我会在这里有所帮助.

解决方法:

我也遇到过同样的问题.

现在我做

@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();
}
上一篇:php-Laravel:如何验证变量是数组还是匹配正则表达式的字符串


下一篇:如何在asp.net mvc 2应用程序中的自定义ValidationAttribute内部访问其他属性值?