Оповещения или всплывающие окна сообщений в Spring MVC
У меня есть пользовательская форма добавления userAdd.jsp. Когда я ввожу данные и отправляю данные, я хочу проверить, является ли введенное поле имени пользователя уникальным по сравнению с базой данных. После проверки и подтверждения только я вставляю данные в базу данных. Я сделал до этого момента в Spring MVC успешно.
Теперь я хочу дать всплывающие предупреждения или диалоговые окна для двух экземпляров в Spring MVC. - имя пользователя уже есть в базе данных - пользователь успешно добавлен в базу данных
Ниже приведены мое представление jsp, метод контроллера и метод репозитория.
фрагмент 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>
Контроллер метод
//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"; }
Методы репозитория для вставки пользовательских данных в базу данных и проверки имени пользователя
/*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" />