Spring MVC jQuery удаленная проверка - PullRequest
3 голосов
/ 17 марта 2010

Я использую Spring MVC на стороне сервера, но на одной из страниц я решил создать проверку AJAX с помощью jQuery, а не проверку 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. Я был бы признателен за помощь здесь.

Ответы [ 2 ]

3 голосов
/ 14 июня 2010

Я столкнулся с той же проблемой с вами.

и теперь я делаю

@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 голос
/ 14 января 2014

Вот еще один пример удаленной проверки Spring MVC jQuery для проверки уникальности пользователя. Параметр передается как json, и сервер возвращает логическое значение.

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")
        }
    }
});

Пружинный контроллер:

@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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...