1.删除功能
1.1.employee.jsp
1.2.employee.js
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
del:function () {
//删除数据
},
save:function () {
//保存数据
}
}
1.3.employee.js
1.4.var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
//删除数据
del:function () {
//拿到选中的这条数据
var row = employeeGrid.datagrid(“getSelected”);
if(row){
$.messager.confirm(‘确认框’, ‘确定要狠心删除我么?’, function®{
if ®{
//进行删除
$.get("/employee/delete",{id:row.id},function (result) {
if(result.success){
$(’#employeeGrid’).datagrid(‘reload’);
}else{
//alert(“删除失败”);
$.messager.alert(‘提示信息’,‘删除失败!,原因:’+result.msg,“error”);
}
})
}
});
}else{
$.messager.alert(‘提示信息’,‘请选择一行再进行删除!’,‘info’);
}
},
save:function () {
//保存数据
}
修改加上弹出功能
employee.js代码
//验证扩展:两次数据是否一致
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
equals: {
validator: function(value,param){
return value == $(param[0]).val();
},
message: ‘两次密码匹配.’
}
});
//验证扩展:用户名是否可以重复使用
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
checkUsername: {
validator: function(value,param){
var employeeId = $("#employeeId").val();
var result = $.ajax({
type: “GET”,
url: “/employee/checkUsername”,
data:{username:value,id:employeeId},
async: false //同步
}).responseText;
return result==“true”;
},
message: ‘用户名不能重复.’
}
});
…
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
//添加数据(弹出添加的模态框)
add:function () {
//如果有data-save属性,我们把它展示出来
$("[data-save]").show();
//启动有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“enable”);
employeeForm.form(“clear”);//清除数据
//弹出表单窗口
employeeDialog.dialog(“center”).dialog(‘open’);
},
//修改数据(弹出修改的模态框)
edit:function () {
//选中了某一条数据才删除
var row = employeeGrid.datagrid(“getSelected”);
if(row){
//隐藏有data-save属性的元素
$("[data-save]").hide();
//禁用有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“disable”);
employeeForm.form("clear");//清除数据
employeeDialog.dialog("center").dialog('open');
//单独解决部门的回显问题
if(row.department){
row["department.id"] = row.department.id;
}
//为form加载数据
$("#employeeForm").form("load",row);
}else{
$.messager.alert('提示信息','请选择一行再进行修改!','info');
}
},
save:function () {
var url = “/employee/save”;
var id = $("#employeeId").val();
if(id){
url = “/employee/update?cmd=update”;
}
employeeForm.form(‘submit’, {
url:url,
onSubmit: function(){
//做验证
return $("#employeeForm").form(“validate”);
},
success:function(data){
var result = JSON.parse(data);//转成相应的json数据
if(result.success) {
$(’#employeeGrid’).datagrid(‘reload’);
}else{
$.messager.alert(‘提示信息’,‘操作失败!,原因:’+result.msg,“error”);
}
employeeDialog.dialog(‘close’);
}
})
}
…
}
同步Ajax请求我们也可以用新的方案:
var isSuccess = $.util.requestAjaxBoolean(’/employee/checkUsername’,{username:value});
1.5.后台的功能支持
1.5.1.用户是否重复验证
EmployeeRepository
public interface EmployeeRepository extends BaseRepository<Employee,Long> {
@Query("select o from Employee o where o.username=?1")
Employee findByUsername(String username);
}
IEmployeeService
public interface IEmployeeService extends IBaseService<Employee,Long> {
/**
* 如果根据用户名查询到了员工 -> 返回false(代表这个用户已经存在)
* @param username
* @return
*/
boolean checkUsername(String username);
}
EmployeeServiceImpl
@Service
public class EmployeeServiceImpl extends BaseServiceImpl<Employee,Long> implements IEmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public boolean checkUsername(String username) {
return employeeRepository.findByUsername(username)==null;
}
}
EmployeeController
@RequestMapping("/checkUsername")
@ResponseBody
public Boolean checkUsername(Long id,String username){
if(id!=null) {
//1.根据id拿到对应的员工
Employee dbEmp = employeeService.findOne(id);
//2.判断数据库的员工的username与传过来的username是否相等
if(username.equals(dbEmp.getUsername())){
return true; //相同代表没有修改
}
}
//正常验证
return employeeService.checkUsername(username);
}
1.5.2.完成基本的添加与修改
//添加
@RequestMapping("/save")
@ResponseBody
public Map<String,Object> save(Employee employee){
return saveOrUpdate(employee);
}
//修改
@RequestMapping("/update")
@ResponseBody
public Map<String,Object> update(Employee employee){
return saveOrUpdate(employee);
}
//添加或者修改
private Map<String,Object> saveOrUpdate(Employee employee){
Map<String,Object> map = new HashMap<>();
try {
employeeService.save(employee);
map.put(SUCCESS, true);
} catch (Exception e) {
e.printStackTrace();
map.put(SUCCESS, false);
map.put(“msg”, e.getMessage());
}
return map;
}
解决修改时的用户名问题
2.数据丢失问题
这里我们出现一个新的问题,当我们完成修改之后,咱们的密码就消失不见了,这里咱们有三个解决方案(至少为什么修改后密码会消失不见,请大家自己分析「第一个项目中已经讲解过原因」!)
2.1.三种解决方案
在这里,咱们有三个解决方案:
方案一:隐藏要传递的值(只隐藏,但是数据还是需要传递,这和第一个项目是同相同的方案)
这个方案的优点是简单易理解,缺点是如果字段过多,代码量会比较大,另外这种方案的安全性确实是有
三.修改功能
用户名验证传了id
后台获取id,根据id拿到对应用户,如果数据库的用户名称和传过来的名称相应,直接返回true,代表这个名字是可以用的
修改的时候没有密码
添加时显示密码,并且把它启用
//把所有带 data-save属性的元素显示起来
$("[data-save]").show();//把对应的元素启用
$("[data-save] input").validatebox(“enable”)
修改时隐藏密码,并且把它禁用
//把所有带 data-save属性的元素隐藏起来
$("[data-save]").hide();//对应的元素禁用(这个值就不会提交到后台)
$("[data-save] input").validatebox(“disable”);
修改回显
// 关连对象回显需要做的操作if(row.department){
row[“department.id”] = row.department.id;
}
//进行数据的回显(在清空后面)
employeeForm.form(“load”,row);
数据丢失(动态修改)
三种解决方案(隐藏域,SQL不修改,先到数据库查)
@ModelAttribute : 在路径访问这个方法的时候会先执行它
解决n-to-n的问题
添加:/employee/save 修改:/employee/update?cmd=update
@ModelAttribute(“editEmployee”)
public Employee beforeEdit(Long id,String cmd){
//修改的时候才查询(只要有id会就进行一次查询,这是不对的)
if(id!=null && “update”.equals(cmd)) {
Employee dbEmp = employeeService.findOne(id);
//把要传过来的关联对象都清空,就可以解决n-to-n的问题
dbEmp.setDepartment(null);
return dbEmp;
}
return null;
}
//这里的ModelAttribute和上面的名称是对应上的
@RequestMapping("/update")
@ResponseBody
public JsonResult update(@ModelAttribute("editEmployee")Employee employee){
return saveOrUpdate(employee);
}
1.删除功能
1.1.employee.jsp
1.2.employee.js
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
del:function () {
//删除数据
},
save:function () {
//保存数据
}
}
1.3.employee.js
1.4.var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
//删除数据
del:function () {
//拿到选中的这条数据
var row = employeeGrid.datagrid(“getSelected”);
if(row){
$.messager.confirm(‘确认框’, ‘确定要狠心删除我么?’, function®{
if ®{
//进行删除
$.get("/employee/delete",{id:row.id},function (result) {
if(result.success){
$(’#employeeGrid’).datagrid(‘reload’);
}else{
//alert(“删除失败”);
$.messager.alert(‘提示信息’,‘删除失败!,原因:’+result.msg,“error”);
}
})
}
});
}else{
$.messager.alert(‘提示信息’,‘请选择一行再进行删除!’,‘info’);
}
},
save:function () {
//保存数据
}
修改加上弹出功能
employee.js代码
//验证扩展:两次数据是否一致
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
equals: {
validator: function(value,param){
return value == $(param[0]).val();
},
message: ‘两次密码匹配.’
}
});
//验证扩展:用户名是否可以重复使用
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
checkUsername: {
validator: function(value,param){
var employeeId = $("#employeeId").val();
var result = $.ajax({
type: “GET”,
url: “/employee/checkUsername”,
data:{username:value,id:employeeId},
async: false //同步
}).responseText;
return result==“true”;
},
message: ‘用户名不能重复.’
}
});
…
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
//添加数据(弹出添加的模态框)
add:function () {
//如果有data-save属性,我们把它展示出来
$("[data-save]").show();
//启动有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“enable”);
employeeForm.form(“clear”);//清除数据
//弹出表单窗口
employeeDialog.dialog(“center”).dialog(‘open’);
},
//修改数据(弹出修改的模态框)
edit:function () {
//选中了某一条数据才删除
var row = employeeGrid.datagrid(“getSelected”);
if(row){
//隐藏有data-save属性的元素
$("[data-save]").hide();
//禁用有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“disable”);
employeeForm.form("clear");//清除数据
employeeDialog.dialog("center").dialog('open');
//单独解决部门的回显问题
if(row.department){
row["department.id"] = row.department.id;
}
//为form加载数据
$("#employeeForm").form("load",row);
}else{
$.messager.alert('提示信息','请选择一行再进行修改!','info');
}
},
save:function () {
var url = “/employee/save”;
var id = $("#employeeId").val();
if(id){
url = “/employee/update?cmd=update”;
}
employeeForm.form(‘submit’, {
url:url,
onSubmit: function(){
//做验证
return $("#employeeForm").form(“validate”);
},
success:function(data){
var result = JSON.parse(data);//转成相应的json数据
if(result.success) {
$(’#employeeGrid’).datagrid(‘reload’);
}else{
$.messager.alert(‘提示信息’,‘操作失败!,原因:’+result.msg,“error”);
}
employeeDialog.dialog(‘close’);
}
})
}
…
}
同步Ajax请求我们也可以用新的方案:
var isSuccess = $.util.requestAjaxBoolean(’/employee/checkUsername’,{username:value});
1.5.后台的功能支持
1.5.1.用户是否重复验证
EmployeeRepository
public interface EmployeeRepository extends BaseRepository<Employee,Long> {
@Query("select o from Employee o where o.username=?1")
Employee findByUsername(String username);
}
IEmployeeService
public interface IEmployeeService extends IBaseService<Employee,Long> {
/**
* 如果根据用户名查询到了员工 -> 返回false(代表这个用户已经存在)
* @param username
* @return
*/
boolean checkUsername(String username);
}
EmployeeServiceImpl
@Service
public class EmployeeServiceImpl extends BaseServiceImpl<Employee,Long> implements IEmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public boolean checkUsername(String username) {
return employeeRepository.findByUsername(username)==null;
}
}
EmployeeController
@RequestMapping("/checkUsername")
@ResponseBody
public Boolean checkUsername(Long id,String username){
if(id!=null) {
//1.根据id拿到对应的员工
Employee dbEmp = employeeService.findOne(id);
//2.判断数据库的员工的username与传过来的username是否相等
if(username.equals(dbEmp.getUsername())){
return true; //相同代表没有修改
}
}
//正常验证
return employeeService.checkUsername(username);
}
1.5.2.完成基本的添加与修改
//添加
@RequestMapping("/save")
@ResponseBody
public Map<String,Object> save(Employee employee){
return saveOrUpdate(employee);
}
//修改
@RequestMapping("/update")
@ResponseBody
public Map<String,Object> update(Employee employee){
return saveOrUpdate(employee);
}
//添加或者修改
private Map<String,Object> saveOrUpdate(Employee employee){
Map<String,Object> map = new HashMap<>();
try {
employeeService.save(employee);
map.put(SUCCESS, true);
} catch (Exception e) {
e.printStackTrace();
map.put(SUCCESS, false);
map.put(“msg”, e.getMessage());
}
return map;
}
解决修改时的用户名问题
2.数据丢失问题
这里我们出现一个新的问题,当我们完成修改之后,咱们的密码就消失不见了,这里咱们有三个解决方案(至少为什么修改后密码会消失不见,请大家自己分析「第一个项目中已经讲解过原因」!)
2.1.三种解决方案
在这里,咱们有三个解决方案:
方案一:隐藏要传递的值(只隐藏,但是数据还是需要传递,这和第一个项目是同相同的方案)
这个方案的优点是简单易理解,缺点是如果字段过多,代码量会比较大,另外这种方案的安全性确实是有
三.修改功能
用户名验证传了id
后台获取id,根据id拿到对应用户,如果数据库的用户名称和传过来的名称相应,直接返回true,代表这个名字是可以用的
修改的时候没有密码
添加时显示密码,并且把它启用
//把所有带 data-save属性的元素显示起来
$("[data-save]").show();//把对应的元素启用
$("[data-save] input").validatebox(“enable”)
修改时隐藏密码,并且把它禁用
//把所有带 data-save属性的元素隐藏起来
$("[data-save]").hide();//对应的元素禁用(这个值就不会提交到后台)
$("[data-save] input").validatebox(“disable”);
修改回显
// 关连对象回显需要做的操作if(row.department){
row[“department.id”] = row.department.id;
}
//进行数据的回显(在清空后面)
employeeForm.form(“load”,row);
数据丢失(动态修改)
三种解决方案(隐藏域,SQL不修改,先到数据库查)
@ModelAttribute : 在路径访问这个方法的时候会先执行它
解决n-to-n的问题
添加:/employee/save 修改:/employee/update?cmd=update
@ModelAttribute(“editEmployee”)
public Employee beforeEdit(Long id,String cmd){
//修改的时候才查询(只要有id会就进行一次查询,这是不对的)
if(id!=null && “update”.equals(cmd)) {
Employee dbEmp = employeeService.findOne(id);
//把要传过来的关联对象都清空,就可以解决n-to-n的问题
dbEmp.setDepartment(null);
return dbEmp;
}
return null;
}
//这里的ModelAttribute和上面的名称是对应上的
@RequestMapping("/update")
@ResponseBody
public JsonResult update(@ModelAttribute("editEmployee")Employee employee){
return saveOrUpdate(employee);
}
1.删除功能
1.1.employee.jsp
1.2.employee.js
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
del:function () {
//删除数据
},
save:function () {
//保存数据
}
}
1.3.employee.js
1.4.var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
//删除数据
del:function () {
//拿到选中的这条数据
var row = employeeGrid.datagrid(“getSelected”);
if(row){
$.messager.confirm(‘确认框’, ‘确认删除??’, function®{
if ®{
//进行删除
$.get("/employee/delete",{id:row.id},function (result) {
if(result.success){
$(’#employeeGrid’).datagrid(‘reload’);
}else{
//alert(“删除失败”);
$.messager.alert(‘提示信息’,‘删除失败!,原因:’+result.msg,“error”);
}
})
}
});
}else{
$.messager.alert(‘提示信息’,‘请选择一行再进行删除!’,‘info’);
}
},
save:function () {
//保存数据
}
修改加上弹出功能
employee.js代码
//验证扩展:两次数据是否一致
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
equals: {
validator: function(value,param){
return value == $(param[0]).val();
},
message: ‘两次密码匹配.’
}
});
//验证扩展:用户名是否可以重复使用
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
checkUsername: {
validator: function(value,param){
var employeeId = $("#employeeId").val();
var result = $.ajax({
type: “GET”,
url: “/employee/checkUsername”,
data:{username:value,id:employeeId},
async: false //同步
}).responseText;
return result==“true”;
},
message: ‘用户名不能重复.’
}
});
…
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
//添加数据(弹出添加的模态框)
add:function () {
//如果有data-save属性,我们把它展示出来
$("[data-save]").show();
//启动有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“enable”);
employeeForm.form(“clear”);//清除数据
//弹出表单窗口
employeeDialog.dialog(“center”).dialog(‘open’);
},
//修改数据(弹出修改的模态框)
edit:function () {
//选中了某一条数据才删除
var row = employeeGrid.datagrid(“getSelected”);
if(row){
//隐藏有data-save属性的元素
$("[data-save]").hide();
//禁用有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“disable”);
employeeForm.form("clear");//清除数据
employeeDialog.dialog("center").dialog('open');
//单独解决部门的回显问题
if(row.department){
row["department.id"] = row.department.id;
}
//为form加载数据
$("#employeeForm").form("load",row);
}else{
$.messager.alert('提示信息','请选择一行再进行修改!','info');
}
},1.删除功能
1.1.employee.jsp
1.2.employee.js
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
del:function () {
//删除数据
},
save:function () {
//保存数据
}
}
1.3.employee.js
1.4.var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
add:function () {
//添加数据(弹出添加的模态框)
},
edit:function () {
//修改数据(弹出修改的模态框)
},
//删除数据
del:function () {
//拿到选中的这条数据
var row = employeeGrid.datagrid(“getSelected”);
if(row){
$.messager.confirm(‘确认框’, ‘确定要狠心删除我么?’, function®{
if ®{
//进行删除
$.get("/employee/delete",{id:row.id},function (result) {
if(result.success){
$(’#employeeGrid’).datagrid(‘reload’);
}else{
//alert(“删除失败”);
$.messager.alert(‘提示信息’,‘删除失败!,原因:’+result.msg,“error”);
}
})
}
});
}else{
$.messager.alert(‘提示信息’,‘请选择一行再进行删除!’,‘info’);
}
},
save:function () {
//保存数据
}
修改加上弹出功能
employee.js代码
//验证扩展:两次数据是否一致
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
equals: {
validator: function(value,param){
return value == $(param[0]).val();
},
message: ‘两次密码匹配.’
}
});
//验证扩展:用户名是否可以重复使用
.
e
x
t
e
n
d
(
.extend(
.extend(.fn.validatebox.defaults.rules, {
checkUsername: {
validator: function(value,param){
var employeeId = $("#employeeId").val();
var result = $.ajax({
type: “GET”,
url: “/employee/checkUsername”,
data:{username:value,id:employeeId},
async: false //同步
}).responseText;
return result==“true”;
},
message: ‘用户名不能重复.’
}
});
…
var itsource={
//查询数据
search:function () {
//需要先引入 jquery.serializejson.js 才可以使用这个方法
var params = searchForm.serializeJSON();
employeeGrid.datagrid(‘load’,params);
},
//添加数据(弹出添加的模态框)
add:function () {
//如果有data-save属性,我们把它展示出来
$("[data-save]").show();
//启动有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“enable”);
employeeForm.form(“clear”);//清除数据
//弹出表单窗口
employeeDialog.dialog(“center”).dialog(‘open’);
},
//修改数据(弹出修改的模态框)
edit:function () {
//选中了某一条数据才删除
var row = employeeGrid.datagrid(“getSelected”);
if(row){
//隐藏有data-save属性的元素
$("[data-save]").hide();
//禁用有data-save属性的input元素的验证功能
$("[data-save] input").validatebox(“disable”);
employeeForm.form("clear");//清除数据
employeeDialog.dialog("center").dialog('open');
//单独解决部门的回显问题
if(row.department){
row["department.id"] = row.department.id;
}
//为form加载数据
$("#employeeForm").form("load",row);
}else{
$.messager.alert('提示信息','请选择一行再进行修改!','info');
}
},
save:function () {
var url = “/employee/save”;
var id = $("#employeeId").val();
if(id){
url = “/employee/update?cmd=update”;
}
employeeForm.form(‘submit’, {
url:url,
onSubmit: function(){
//做验证
return $("#employeeForm").form(“validate”);
},
success:function(data){
var result = JSON.parse(data);//转成相应的json数据
if(result.success) {
$(’#employeeGrid’).datagrid(‘reload’);
}else{
$.messager.alert(‘提示信息’,‘操作失败!,原因:’+result.msg,“error”);
}
employeeDialog.dialog(‘close’);
}
})
}
…
}
同步Ajax请求我们也可以用新的方案:
var isSuccess = $.util.requestAjaxBoolean(’/employee/checkUsername’,{username:value});
1.5.后台的功能支持
1.5.1.用户是否重复验证
EmployeeRepository
public interface EmployeeRepository extends BaseRepository<Employee,Long> {
@Query("select o from Employee o where o.username=?1")
Employee findByUsername(String username);
}
IEmployeeService
public interface IEmployeeService extends IBaseService<Employee,Long> {
/**
* 如果根据用户名查询到了员工 -> 返回false(代表这个用户已经存在)
* @param username
* @return
*/
boolean checkUsername(String username);
}
EmployeeServiceImpl
@Service
public class EmployeeServiceImpl extends BaseServiceImpl<Employee,Long> implements IEmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public boolean checkUsername(String username) {
return employeeRepository.findByUsername(username)==null;
}
}
EmployeeController
@RequestMapping("/checkUsername")
@ResponseBody
public Boolean checkUsername(Long id,String username){
if(id!=null) {
//1.根据id拿到对应的员工
Employee dbEmp = employeeService.findOne(id);
//2.判断数据库的员工的username与传过来的username是否相等
if(username.equals(dbEmp.getUsername())){
return true; //相同代表没有修改
}
}
//正常验证
return employeeService.checkUsername(username);
}
1.5.2.完成基本的添加与修改
//添加
@RequestMapping("/save")
@ResponseBody
public Map<String,Object> save(Employee employee){
return saveOrUpdate(employee);
}
//修改
@RequestMapping("/update")
@ResponseBody
public Map<String,Object> update(Employee employee){
return saveOrUpdate(employee);
}
//添加或者修改
private Map<String,Object> saveOrUpdate(Employee employee){
Map<String,Object> map = new HashMap<>();
try {
employeeService.save(employee);
map.put(SUCCESS, true);
} catch (Exception e) {
e.printStackTrace();
map.put(SUCCESS, false);
map.put(“msg”, e.getMessage());
}
return map;
}
解决修改时的用户名问题
2.数据丢失问题
这里我们出现一个新的问题,当我们完成修改之后,咱们的密码就消失不见了,这里咱们有三个解决方案(至少为什么修改后密码会消失不见,请大家自己分析「第一个项目中已经讲解过原因」!)
2.1.三种解决方案
在这里,咱们有三个解决方案:
方案一:隐藏要传递的值(只隐藏,但是数据还是需要传递,这和第一个项目是同相同的方案)
这个方案的优点是简单易理解,缺点是如果字段过多,代码量会比较大,另外这种方案的安全性确实是有
三.修改功能
用户名验证传了id
后台获取id,根据id拿到对应用户,如果数据库的用户名称和传过来的名称相应,直接返回true,代表这个名字是可以用的
修改的时候没有密码
添加时显示密码,并且把它启用
//把所有带 data-save属性的元素显示起来
$("[data-save]").show();//把对应的元素启用
$("[data-save] input").validatebox(“enable”)
修改时隐藏密码,并且把它禁用
//把所有带 data-save属性的元素隐藏起来
$("[data-save]").hide();//对应的元素禁用(这个值就不会提交到后台)
$("[data-save] input").validatebox(“disable”);
修改回显
// 关连对象回显需要做的操作if(row.department){
row[“department.id”] = row.department.id;
}
//进行数据的回显(在清空后面)
employeeForm.form(“load”,row);
数据丢失(动态修改)
三种解决方案(隐藏域,SQL不修改,先到数据库查)
@ModelAttribute : 在路径访问这个方法的时候会先执行它
解决n-to-n的问题
添加:/employee/save 修改:/employee/update?cmd=update
@ModelAttribute(“editEmployee”)
public Employee beforeEdit(Long id,String cmd){
//修改的时候才查询(只要有id会就进行一次查询,这是不对的)
if(id!=null && “update”.equals(cmd)) {
Employee dbEmp = employeeService.findOne(id);
//把要传过来的关联对象都清空,就可以解决n-to-n的问题
dbEmp.setDepartment(null);
return dbEmp;
}
return null;
}
//这里的ModelAttribute和上面的名称是对应上的
@RequestMapping("/update")
@ResponseBody
public JsonResult update(@ModelAttribute("editEmployee")Employee employee){
return saveOrUpdate(employee);
}
save:function () {
var url = “/employee/save”;
var id = $("#employeeId").val();
if(id){
url = “/employee/update?cmd=update”;
}
employeeForm.form(‘submit’, {
url:url,
onSubmit: function(){
//做验证
return $("#employeeForm").form(“validate”);
},
success:function(data){
var result = JSON.parse(data);//转成相应的json数据
if(result.success) {
$(’#employeeGrid’).datagrid(‘reload’);
}else{
$.messager.alert(‘提示信息’,‘操作失败!,原因:’+result.msg,“error”);
}
employeeDialog.dialog(‘close’);
}
})
}
…
}
同步Ajax请求我们也可以用新的方案:
var isSuccess = $.util.requestAjaxBoolean(’/employee/checkUsername’,{username:value});
1.5.后台的功能支持
1.5.1.用户是否重复验证
EmployeeRepository
public interface EmployeeRepository extends BaseRepository<Employee,Long> {
@Query("select o from Employee o where o.username=?1")
Employee findByUsername(String username);
}
IEmployeeService
public interface IEmployeeService extends IBaseService<Employee,Long> {
/**
* 如果根据用户名查询到了员工 -> 返回false(代表这个用户已经存在)
* @param username
* @return
*/
boolean checkUsername(String username);
}
EmployeeServiceImpl
@Service
public class EmployeeServiceImpl extends BaseServiceImpl<Employee,Long> implements IEmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
@Override
public boolean checkUsername(String username) {
return employeeRepository.findByUsername(username)==null;
}
}
EmployeeController
@RequestMapping("/checkUsername")
@ResponseBody
public Boolean checkUsername(Long id,String username){
if(id!=null) {
//1.根据id拿到对应的员工
Employee dbEmp = employeeService.findOne(id);
//2.判断数据库的员工的username与传过来的username是否相等
if(username.equals(dbEmp.getUsername())){
return true; //相同代表没有修改
}
}
//正常验证
return employeeService.checkUsername(username);
}
1.5.2.完成基本的添加与修改
//添加
@RequestMapping("/save")
@ResponseBody
public Map<String,Object> save(Employee employee){
return saveOrUpdate(employee);
}
//修改
@RequestMapping("/update")
@ResponseBody
public Map<String,Object> update(Employee employee){
return saveOrUpdate(employee);
}
//添加或者修改
private Map<String,Object> saveOrUpdate(Employee employee){
Map<String,Object> map = new HashMap<>();
try {
employeeService.save(employee);
map.put(SUCCESS, true);
} catch (Exception e) {
e.printStackTrace();
map.put(SUCCESS, false);
map.put(“msg”, e.getMessage());
}
return map;
}
解决修改时的用户名问题
2.数据丢失问题
这里我们出现一个新的问题,当我们完成修改之后,咱们的密码就消失不见了,这里咱们有三个解决方案(至少为什么修改后密码会消失不见,请大家自己分析「第一个项目中已经讲解过原因」!)
2.1.三种解决方案
在这里,咱们有三个解决方案:
方案一:隐藏要传递的值(只隐藏,但是数据还是需要传递,这和第一个项目是同相同的方案)
这个方案的优点是简单易理解,缺点是如果字段过多,代码量会比较大,另外这种方案的安全性确实是有
三.修改功能
用户名验证传了id
后台获取id,根据id拿到对应用户,如果数据库的用户名称和传过来的名称相应,直接返回true,代表这个名字是可以用的
修改的时候没有密码
添加时显示密码,并且把它启用
//把所有带 data-save属性的元素显示起来
$("[data-save]").show();//把对应的元素启用
$("[data-save] input").validatebox(“enable”)
修改时隐藏密码,并且把它禁用
//把所有带 data-save属性的元素隐藏起来
$("[data-save]").hide();//对应的元素禁用(这个值就不会提交到后台)
$("[data-save] input").validatebox(“disable”);
修改回显
// 关连对象回显需要做的操作if(row.department){
row[“department.id”] = row.department.id;
}
//进行数据的回显(在清空后面)
employeeForm.form(“load”,row);
数据丢失(动态修改)
三种解决方案(隐藏域,SQL不修改,先到数据库查)
@ModelAttribute : 在路径访问这个方法的时候会先执行它
解决n-to-n的问题
添加:/employee/save 修改:/employee/update?cmd=update
@ModelAttribute(“editEmployee”)
public Employee beforeEdit(Long id,String cmd){
//修改的时候才查询(只要有id会就进行一次查询,这是不对的)
if(id!=null && “update”.equals(cmd)) {
Employee dbEmp = employeeService.findOne(id);
//把要传过来的关联对象都清空,就可以解决n-to-n的问题
dbEmp.setDepartment(null);
return dbEmp;
}
return null;
}
//这里的ModelAttribute和上面的名称是对应上的
@RequestMapping("/update")
@ResponseBody
public JsonResult update(@ModelAttribute("editEmployee")Employee employee){
return saveOrUpdate(employee);
}