jsp页面中怎么实现只要一个按钮就能完成添加和修改两个功能?

jsp页面中怎么实现只要一个按钮就能完成添加和修改两个功能?

问题描述:

第一次进入页面时,由于数据库没有数据,所以在表单里填写完数据后,
点击保存按钮,就可以调用后台的插入方法将数据都插入进数据库,那么
当同一个用户再次进入页面时,由于已经有数据了,页面上的表单里也把
数据显示了出来,那么如果用户修改了表单里的某些数据后,再点击保存
按钮时,怎么才能不调用后台的插入方法,而是调用更新方法来修改数据呢?
必须要在同一个按钮实现,不能添加一个新的修改按钮。

数据库中设置一个字段来作为是否为第一次添加数据的判断,前台读取这个数据,在点击按钮时,先根据这个数据判断是否为第一次添加数据,在进行添加或者修改操作

隐藏一条记录的唯一标记,如果这个标记存在,则说明 这条记录已经存在,后台处理 调用更新方法,如果标记为空, 则说明这条记录不存在,后台处理 调用 新增方法

按钮点击后先做一步判断,判断提交的数据在数据库存不存在,存在就更新,不存在就插入

用同一个接口传到后台,后台判断数据库是否有数据,没有就执行插入操作,有就执行更新操作。

修改的的时候一定是根据一个唯一的标识去修改的,所以点击按钮可以先根据这个标识在数据中先查找,如果不存在就走保存的方法,如果存在,就走修改的方法

你在提交到后台进行保存的时候会有记录的id;根据id判断;id为空的时候就是新增;有id就根据id去更新

** public @ResponseBody JSONObject list(Login login) throws UnsupportedEncodingException, NoSuchAlgorithmException {
//返回结果
JSONObject result=new JSONObject();
result.put("status",0);
if(login.getId()!=null){//根据id去判断;有id编辑
Login duplicateLogin=loginService.findDuplicateName(login);
if(duplicateLogin==null){
login.setPassword(EncoderByMd5.EncoderByMd5(login.getPassword()));
loginService.update(login);
}else{
result.put("msg","用户名或者电话已经存在;请重新填写");
}
}else{//没有id新增
Login duplicateLogin=loginService.findUserByUsername(login);
if(duplicateLogin!=null){
result.put("msg","用户名或者电话已经存在;请重新填写");
}else{
if(StringUtils.isNotBlank(login.getPassword())){
login.setPassword(EncoderByMd5.EncoderByMd5(login.getPassword()));
}else{
login.setPassword(EncoderByMd5.EncoderByMd5("123456"));
}
int i=loginService.insert(login);
if(i>0){
result.put("status",1);
result.put("msg","添加成功");
}else{
result.put("msg","添加失败");
}
}
}
return result;
}

可以让这个按钮调用固定的save()方法,后台save()中先判断数据库是否有数据。
或者前端加一个隐藏标签查数据,按钮点击时调用js代码判断隐藏标签值是否存在,然后调用对应的后台insert/update方法。

saveOrupdate

由于插入和修改是两个完全不同的操作,所以就需要进行判断什么时间该进行插入、什么时间进行修改。
楼主的问题这样解决:
设置一个隐藏的ID来标识。进行插入、修改前先查询是否有该记录。没有就进行插入,有就进行删除。
那么ID怎样生成。可以根据数据库的主键生成一个唯一的ID+1。就是在打开界面时

通过form表单提交到后台,先根据提交的某一个属性,在数据库中检索,如果结果为空 ,则调用.save()方法;如果结果不为空,进行update操作.

判断是否传入ID了,来区别是保存还是修改

在表中建立主键id,并在jsp页面中建立隐藏id的隐藏字段。
在后台,保存数据时使用 hibernate的saveOrUpdate()方法,这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。

设置一个隐藏属性,来判断执行那个操作