修改报销单的业务逻辑问题

修改报销单的业务逻辑问题

修改报销单业务逻辑没有看懂啊,个人理解如下,请老师指导:


第一步是填写报销单,假设填写成功后,数据库里就有id=1的一条报销单数据,同时也有claim_voucher_id=1的报销单条目数据集合,此时点击修改按钮,将通过报销单id=1,把报销单数据及报销单条目的数据转发到claim_voucher_update.jsp上面,而页面通过隐藏提交的方式提交报销单id和报销单条目id,


<form:hidden path="claimVoucher.id"/>

<form:hidden path="items[${sta.index}].id"/>

则后台claimVouche.getId()这个方法中获取的报销单id也就等于1,查询出的报销单条目(claim_voucher_id)属性为1的条目集合,

List<ClaimVoucherItem> olds = claimVoucherItemDao.selectByClaimVoucher(claimVoucher.getId());

此时页面传递过来的报销单条目集合的id因为是隐藏传递的,那么页面不论怎么增加减少,页面传递过来的报销单条目id不变的,那么此时新传入的集合items集合与旧的集合olds中的id是不是恒相等,即item.getId()==old.getId()这个判断条件恒成立,则isHave判断值这个就是恒为true,

那么下面这个判断是不是恒不能执行

if (!isHave) {
   claimVoucherItemDao.delete(old.getId());
}


而下面的两个判断item.getID()是不是恒不为空,恒大于0,因为只要插入了一条报销单的数据,那么条目的id就不为空且恒大于0,那下面的两个方法就只会执行update方法,而不会执行insert方法?

if (item.getId() != null && item.getId() > 0) {
   claimVoucherItemDao.update(item);
} else {
   claimVoucherItemDao.insert(item);
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小脸 2021-04-27 14:38:57

同学你好,上述判断都是有可能被执行的,这里同学可以参考如下代码分析来理解:http://img1.sycdn.imooc.com//climg/6087a70109c535c112850781.jpg

祝学习愉快~


  • 提问者 视线模糊 #1

    老师,假设我插入了一个报销单,报销单条目的编号是6、7、8,则转发到页面的报销单条目的编号也是6,7,8,进入修改页面的时候是通过点击“X”号和“+”是能够改变id这个属性吗?如下图,不知道理解对不对

    http://img1.sycdn.imooc.com//climg/608893f30962d47f13130675.jpg

    http://img1.sycdn.imooc.com//climg/608893f30958546609800577.jpg

    http://img1.sycdn.imooc.com//climg/608893f309ff00ca13130691.jpg


    2021-04-28 06:57:38
  • 好帮手慕小脸 回复 提问者 视线模糊 #2

    同学你好,理解是正确的,这里同学可以操作一下

    祝学习愉快~

    2021-04-28 11:22:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师