这里为什么要作 是否为空的判断?

这里为什么要作 是否为空的判断?

在类CakeController中的edit()方法中的这句代码:

if (item.getFieldName().equals("imagePath")&& cake.getImagePath()==null)
   cake.setImagePath(item.getString("UTF-8"));

其中cake.getImagePath()==null这个判断似乎没有必要,根据程序顺序执行的规则,cake_edit.jsp中imagePath在image之前提交,servlet首先接收到的是imagePath,程序执行到此,cake的imagPath一定为空,因为还没有赋值,这点不理解。

正在回答

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

2回答

同学你好,

首先,这里确实如同学所说,加不加都一样。但是,这基于一个前提,就是这个imagePath是在image之上的。

http://img1.sycdn.imooc.com//climg/5df5d23209baf69610010160.jpg

这样如果传图片了,则最后走的是image中最后上传图片的路径。如果没上传,就是之前从imagePath中获取的路径。

但假如我们把这两个位置调一下呢?

http://img1.sycdn.imooc.com//climg/5df5d373093cce4410050168.jpg

那么即使你上传了image,在文件那里设置了新上传的图片,并设置到了cake中。

然后if中还会走这个imagePath,获取到了之前我们的图片,然后又设置到了cake中。

这样就相当于还是原来的图片了。也就是我们就无法修改之前图片。

而如果我们判断一下,如果cake.getImagePath()!=null ,说明咱们在image中对这个图片的属性进行了赋值,那我们就不用再走这个item.getFieldName().equals("imagePath")去重新给图片属性赋值了。

2)如果前端的小伙伴给我们的页面就是第二种样子的,那他们设计的也不算有错,可是,作为开发人员,就应该做好这个判断,避免出现问题,因为咱们没有办法规定那个image就必须是最后一项。

同学可以把这两个表单项调换一下位置试一下哦。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


好帮手慕阿满 2019-12-14 18:09:04

同学你好,添加cake时,有给cake设置imagePath,但是在编辑时,item.getFileName().equals("imagePath")有值,也就是添加cake传入的值,会将添加cake时imagePath的值重新设置到imagePath中,和编辑时新添加图片的imagePath冲突。所以这里添加了cake.getImagePath()==null的判断,也就是说,如果cake中没有值,item.getFileName().equals("imagePath")直接给imagePath设置值。如果cake有值,表示这里是编辑时,将会执行else中的cake.setImagePath(path);设置新的图片路径。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 慕沐8221787 #1
    老师你这个描述我完全看不明白,这么说吧,我就是认为这个地方的条件判断不需要 && cake.getImagePath()==null这个代码,理由如下: 1、这里的cake是本方法中创建的,程序运行到这句代码(if (item.getFieldName().equals("imagePath")&& cake.getImagePath()==null) cake.setImagePath(item.getString("UTF-8"));)时,cake中的imagePath还没有赋值,必然是空的; 2、对这条if语句修改为如下代码(去掉其中的cake.getImagePath()==null): if (item.getFieldName().equals("imagePath")) { System.out.println(cake.getImagePath()); cake.setImagePath(item.getString("UTF-8")); },经过验证,程序运行时,无论编辑时是否提交图片(image),控制台打印结果都是null,老师可以试一下。 综上所述,老师看看我的分析有什么问题?
    2019-12-15 10:47:26
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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