2 votes

json envoie une valeur nulle au contrôleur

Je valide un formulaire en utilisant jquery.validate.js et j'ai besoin d'identifier les entrées en double, pour cela j'utilise une méthode personnalisée c'est-à-dire :

jQuery.validator.addMethod("uniqueName", function(name, element) {
        var response;
        $.ajax({
            type: "POST",
            dataType : "json",
            url:"${pageContext.request.contextPath}/company/getDuplicate",
            data:"name="+name,
            async:false,
            success:function(data){
                response = data;
            },
            error: function (data) {
                alert(request.responseText);
            }
        });
    }, "Name is Already Taken");

dans la section des règles :

rules : {
            name : {
                required : true,
                uniqueName : true
                }
        },
        errorElement : "span",
        messages : {
            name : {
                required : "Name Is Required"
            }
        }

Voici mon code JSP :

<label>Name:</lable>
<form:input path="name"></form:input>

Il cherche l'url spécifié mais Json envoie une valeur nulle à la méthode.

C'est ma méthode de contrôle :

@RequestMapping(value = "/company/getDuplicate", method = RequestMethod.POST, headers = "Accept=*/*")
     public @ResponseBody void getTitleList(HttpServletRequest request, HttpServletResponse response) {

        JSONObject json = new JSONObject();
        String data = ((String)json.get("name"));
        List<Company> matched = companyService.getDuplicate(data);
        if(matched != null && !"".equals(matched)){
            json.put("name", "present");
            System.out.flush();
        }
        else{
            json.put("name", "notPresent");
            System.out.flush();
        }
    }

Ce que je veux, c'est : 1. comment envoyer la valeur de la zone de texte au contrôleur (Json envoyant null dans mon cas). 2. Dans la méthode ci-dessus, je ne pense pas que 'if statement have write condition' parce que si 'name' n'existe pas dans la base de données, alors la variable 'matched' se présente comme ceci => []

Veuillez m'aider à résoudre ce problème. Merci d'avance.

0voto

harrybvp Points 2333

Modifiez votre code comme ci-dessous :

$.ajax({
            type: "POST",
            dataType : "json",
            url:"${pageContext.request.contextPath}/company/getDuplicate",
            data:{"name":name},
            async:false,
            success:function(data){
                response = data;
            },
            error: function (data) {
                alert(request.responseText);
            }
        });

et modifiez votre gestionnaire de contrôleur comme suit
Remarquez les deux premières lignes commentées et l'ajout de @RequestParam(value="name") String name dans la signature de la méthode

@RequestMapping(value = "/company/getDuplicate", method = RequestMethod.POST, headers = "Accept=*/*")
     public @ResponseBody void getTitleList(@RequestParam(value="name") String name,HttpServletRequest request, HttpServletResponse response) {

        //JSONObject json = new JSONObject();
        //String data = ((String)json.get("name"));
        List<Company> matched = companyService.getDuplicate(name);
        if(matched != null && !"".equals(matched)){
            json.put("name", "present");
            System.out.flush();
        }
        else{
            json.put("name", "notPresent");
            System.out.flush();
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X