Оповещения или всплывающие окна сообщений в Spring MVC

У меня есть пользовательская форма добавления userAdd.jsp. Когда я ввожу данные и отправляю данные, я хочу проверить, является ли введенное поле имени пользователя уникальным по сравнению с базой данных. После проверки и подтверждения только я вставляю данные в базу данных. Я сделал до этого момента в Spring MVC успешно.
Теперь я хочу дать всплывающие предупреждения или диалоговые окна для двух экземпляров в Spring MVC. - имя пользователя уже есть в базе данных - пользователь успешно добавлен в базу данных

Ниже приведены мое представление jsp, метод контроллера и метод репозитория.

  1. фрагмент userAdd.jsp

                      <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. Заранее спасибо:)

2 ответа

В моем вопросе, поскольку я хотел, чтобы оповещение находилось на той же странице без перенаправления, я написал другой метод контроллера следующим образом и код javascript. В этом методе контроллера возвращается нулевой объект User, поэтому переменная usernameUnique имеет вид всегда верно и выдает одно и то же предупреждающее сообщение каждый раз. (Учтите, что существует отдельный метод контроллера для вставки заполненных данных в базу данных)

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

    });
});

Чтобы открыть окно предупреждения (в классическом веб-приложении), необходимо отправить клиенту страницу формы (с заполненными полями) и код сценария 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-Tag для каждого поля ввода

 <form:input path="username" .../>
 <form:errors path="username" cssClass="error" />
Другие вопросы по тегам