我有一个用户添加表单userAdd.jsp。当我输入数据并提交时,我想检查输入的用户名字段是否与数据库相比是唯一的。在检查并确认后,我将数据插入数据库。我已经成功地在Spring mvc中做到了这一点 现在我想为Spring MVC中的两个实例提供弹出警报或对话框。 - 用户名已在数据库中 - 用户已成功添加到数据库
以下是我的jsp视图,控制器方法和存储库方法
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>
控制器方法
//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中的弹出警报。 在此先感谢:)
答案 0 :(得分: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" />
答案 1 :(得分:0)
在我的问题中,因为我希望在没有任何重定向的同一页面中有一个警报,我写了另一个控制器方法如下和一个javascript代码..在这个控制器方法中返回一个null User对象,这样&# 34; usernameUnique&#34;变量始终为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);
}
});
});
});