2016-10-05 1 views
0

J'ai un utilisateur ajouter un formulaire userAdd.jsp. Lorsque je saisis des données et que je les soumets, je veux vérifier si le champ de nom d'utilisateur entré est unique par rapport à la base de données. Après avoir vérifié et confirmé seulement j'insère les données dans la base de données. J'ai fait jusqu'à ce moment au printemps mvc avec succès.
Maintenant, je veux donner des alertes contextuelles ou des boîtes de dialogue pour les deux instances dans Spring MVC. - le nom d'utilisateur est déjà dans la base de données - utilisateur est ajouté avec succès à la base de donnéesAlertes ou boîtes de message pop-up dans Spring MVC

Voici les moi jsp, méthode du contrôleur et la méthode de dépôt

  1. userAdd.jsp snipplet

        <div class="col-xs-4"> 
            <form:input path="username" class="form-control" name="username_admin" id="username_admin" placeholder="User Name" type="text" required="required"/> 
           </div> 
           <div class="col-xs-4"> 
            <form:input path="password" class="form-control" id="password1" placeholder="Password" type="text" required="required" onchange="validatePassword(password1)"/> 
           </div> 
           <div class="col-xs-4"> 
            <form:input path="password" class="form-control" id="cpassword" placeholder="Password Confirm" type="text" required="required" onchange="passwordsEqual(cpassword,password1)"/> 
           </div> 
    
  2. Méthode de contrôleur

    //to show the userAdd.jsp page 
        @RequestMapping(value="/add",method=RequestMethod.GET) 
        public ModelAndView showCustomer(){ 
        return new ModelAndView("userAdd", "command",new User()); 
        } 
    
    
        //to handle the form data submission and check username 
        @RequestMapping(value="/addCustomer",method = RequestMethod.POST) 
        public String saveOrUpdate(@ModelAttribute("newUser") User newUser, 
              final RedirectAttributes redirectAttributes) throws SQLIntegrityConstraintViolationException { 
    
        boolean usernameUnique=staffRepository.checkUsernameUnique(newUser); 
        if(usernameUnique) { 
         int i = staffRepository.add(newUser); 
         if (i == 0) 
          //alert saying server error in inserting data to mysql 
         else { 
    
          //alert or dialog box confirming successful user add 
         } 
        }else{ 
         //alert saying username exists in database 
        } 
        return "redirect:list"; 
    } 
    
  3. méthodes du référentiel pour insérer des données d'utilisateur à la base de données et vérifier le nom d'utilisateur

    /*add a new staff member*/ 
        @Override 
        public int add(User user) throws DuplicateKeyException { 
    
        int row = 0; 
    
        String un = user.getUsername(); 
        String pw = user.getPassword(); 
        String des = user.getDesignation(); 
        if (un != "" && pw != "") { 
        { 
    
    
          String sql = "INSERT INTO staff " + 
            "(title,username,password,first_name,last_name,email,mobile,address_line1,address_line2,address_line3," + 
            "designation,department,branch,register_date,status) VALUES (?,?,sha1(?),?,?,?,?,?,?,?,?,?,?,CURRENT_DATE,1)"; 
    
          row = jdbcTemplate.update(sql, new Object[]{user.getTitle(), user.getUsername(), user.getPassword(), user.getFirstName(), user.getLastName(), 
            user.getEmail(), user.getMobile(), user.getAddressL1(), user.getAddressL2(), user.getAddressL3(), user.getDesignation(), 
            user.getDepartment(), user.getBranch()}); 
          updateGroupStaff(des, un); 
    
    
          log.info(row + " staff inserted"); 
          log.info(un); 
         /*}else 
          log.info("username already available");*/ 
        } else 
         log.error("values cannot be empty"); 
    
        return row; 
    
    } 
    
    
    
        //check username availability 
        @Override 
        public boolean checkUsernameUnique(User user) { 
    
        boolean result = true; 
    
        String sql = "SELECT count(*) FROM staff WHERE username = ? "; 
    
        int count = jdbcTemplate.queryForObject(
          sql, new Object[]{user.getUsername()}, Integer.class); 
    
        if (count > 0) { 
         result = false; 
         log.info("username already available"); 
        } 
        log.info(result); 
        return result; 
    } 
    

requêtes SQL fonctionne très bien et je besoin d'un moyen d'obtenir des alertes popup au printemps mvc. Merci d'avance :)

Répondre

0

Pour ouvrir une boîte d'alerte (dans une application web classique), vous devez envoyer la page de formulaire (avec les champs remplis) et le code de script Java pour la boîte d'erreur au client, en réponse à la demande de publication.

Typique n'ouvrirait pas une boîte d'erreur pour les échecs de validation de formulaire, au lieu de marquer le champ avec une bordure rouge, ou quelque chose d'autre, et écrire un indice sur le problème à côté de lui.

@RequestMapping(value="/addCustomer",method = RequestMethod.POST) 
public ModelAndView saveOrUpdate(@ModelAttribute("newUser") User newUser, BindingResult validationResult) throws SQLIntegrityConstraintViolationException { 

    if (validationResult.hasErrors()) { 
     new ModelAndView("userAdd", "command", newUser); 
    } 

    boolean usernameUnique=staffRepository.checkUsernameUnique(newUser); 
    if(usernameUnique) { 
     int i = staffRepository.add(newUser); 
     if (i == 0) 
      return new ModelAndView(new RedirectView("stangeFailurePage")); 
     else { 
      return new ModelAndView(new RedirectView("successPage")); 
     } 
    }else{ 
     validationResult.rejectValue("username", "error.username.exists", "The username is already in use."); 
     new ModelAndView("userAdd", "command", newUser); 
    } 
    return new ModelAndView(new RedirectView("list")); 
} 

pour la validation, vous devez ajouter les errors -tag à chaque champ d'entrée

<form:input path="username" .../> 
<form:errors path="username" cssClass="error" /> 
+0

Merci pour la réponse .... Mais ici une redirection vers une autre page se produit ... droite ... Je préférerais vraiment rester dans la même page et informer l'ajout ou le nom d'utilisateur de succès existe. Ici – difna

+0

pour "nom d'utilisateur existe" l'utilisateur obtient déjà le même jsp! Pour tout le reste: cela dépend de ce que vous entendez par "rester dans la même page": même URL ou même jsp? --- bien sûr, vous pouvez utiliser des drapeaux et rendre le même jsp même pour "succès" et "strangeFailure" – Ralph

+0

Merci pour la guidence .. – difna

0

Dans ma question que je voulais avoir une alerte étant dans la même page sans redirection, je l'ai écrit une autre méthode de contrôleur comme suit et un code javascript .. Dans cette méthode de contrôleur un objet utilisateur null est retourné, de sorte que la variable "usernameUnique" est toujours vrai et donne le même message d'alerte à chaque fois. (Considérons il existe un procédé de commande séparé pour insérer des données à la base de données remplies)

@RequestMapping(value="/uniqueUsername",method=RequestMethod.POST) 
public @ResponseBody int checkUser(@ModelAttribute("newUser") User newUser){ 
boolean usernameUnique ; 
int returnMsg; 

usernameUnique=staffRepository.checkUsernameUnique(newUser); 
if(!usernameUnique){ 
     returnMsg= 1; 
}else 
     returnType=0; 

return returnType; 

}

le code en est comme ci-dessous. ceci est écrit pour la fonction de changement #username_admin zone de texte

$(document).ready(function(){ 
    $("#username_admin").change(function(){ 
     var uname = $(this).val(); 
     $.ajax({ 
      type: "POST", 
      url: "https://localhost:8443/admin/users/uniqueUsername", 
      data: {"uname": uname}, 
      success: function(msg){ 

        if(msg == 0) 
        alert("OK"); 
        else 
        alert("User name exists !... try another");*//* 

       alert(msg + uname); 


      }, 
      error:function(){ 
       alert("ajax failed" +uname); 
      } 
     }); 

    }); 
});