2016-10-05 33 views
0

我有一个用户添加表单userAdd.jsp。当我输入数据并提交时,我想检查输入的用户名字段是否与数据库相比是唯一的。在检查并确认后,我只能将数据插入数据库。我已经在Spring mvc中成功完成了这一点。
现在我想给弹出警报或对话框在Spring MVC中的两个实例。 - 用户名是已经在数据库 - 用户成功添加到数据库Spring MVC中的警报或弹出消息框

以下是我的jsp视图,控制器,方法和库法

  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. 控制器方法

    //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. 库的方法将用户数据插入到数据库,并检查用户名

    /*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; 
    } 
    

SQL查询工作非常细,我需要一种方式来获得弹出的提示Spring MVC中。 感谢提前:)

回答

0

要打开一个警告框(在经典的Web应用程序),您需要发送的表单页面(与填充字段)以及错误框中的Java脚本代码返回给客户端,作为对帖子请求的回应。

典型的人不会打开表单验证失败的错误框,而是用红色边框或其他标记来标记字段,并在旁边写下关于问题的提示。

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

用于验证您需要将errors - 标签添加到每个输入字段

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

感谢您的回答....但在这里重定向到另一个页面时...正确的...我真的宁愿留在同一个页面,并通知成功的用户添加或用户名存在。这里 – difna

+0

为“user-name exists”,用户已经获得相同的jsp!对于其他任何事情:这取决于您“留在同一页面”中的意思:相同的网址或相同的jsp? ---当然你也可以使用标志并且渲染相同的jsp,即使是“成功”和“奇怪失败” – Ralph

+0

感谢您的指导.. – difna

0

在我的问题,因为我想有一个警报在同一个页面是没有任何重定向,我又写了控制器方法如下,一个javascript代码。在这个控制器方法中,返回一个空的User对象,这样“usernameUnique”变量总是为true,并且每次都会给出相同的警报消息。 (考虑有一个单独的控制器的方法来插入填充的数据到数据库)

@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; 

}

JS该代码如下所示。这样做是为了#username_admin文本框更改功能书面

$(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); 
      } 
     }); 

    }); 
});