SSM框架训练 实现各个功能时遇到的常见问题

快速复制当前代码到下一行:ctrl+D

格式化代码(快速整理代码):ctril+alt+L

一步一步来,后续会不停添加功能。

先创建项目结构:搭建框架

(36条消息) SSM框架模板(高配:一次性配完所有需要的配置文件)_one day321的博客-CSDN博客

登录与注册 功能实现 的问题:

登录很简单,这里就不详述了。可以参考上一个博客的内容,里面有关登录的介绍。

主要看注册的问题:

第一个问题:没有进行 判断数据是否为空,就插入数据到数据库里面了,这个时候插入的数据都是null。

原因:通过logger.ingo("user")  。我们可以发现。原来我们的判断语句是:

if(user ==null)   。但是日志输出的user 是一个 po.user类型,里面各个数据存放的是null。但不是user为null。

修改:  改为user.getAccount() ==null

第二个问题:插入了三次

在插入语句里面,插入了三次。是因为,这个里面,使用了三次插入 (userDao.register(user)尽管 ) 

修改:将userDao.register语句只保存一个就可以了。

第三个问题:从表单提交给Controller的数据。需要有model的属性指定。

在浏览器输入/register 的时候,它的modelAttribute是user。表示,它提交的表单,其中会有一个user的model属性。所以这里要像下面一样修改。

第四个问题:从service层提交给view层的数据。也需要有相应的model属性指定

 像下面,service层返回给login.jsp。然后login.jsp存在modelAttribute("login")。所以这里必须也要指定login的model属性。

第三个和第四个问题,分别是 从两个方向提交数据,如果缺少上述属性的指定,就会造成,浏览器500,并提示,找不到bean标签。

第五个问题:是有关数据库的属性指定。

比如,这里指定id 不能为空,所以。在Mapper.xml文件里面,需要首先对sql语句里面的id进行赋值,否则,就会报错。

 比如这里,就必须先进行赋值null。

第二个功能:实现 商品类型的展现 和商品类型的添加。

第一个问题:404

商品类型和商品类型的添加都属于一个商品类型的表。  然后我在做的时候,把SQL语句放在了UserMapper.xml文件里面(UserMapper.xml 文件的映射是dao.userDao。)不符合我们属于商品类型的表。

修改:需要创建一个商品类型的Mapper.xml。需要创建 一个POJO类型的商品类型。在mybatis-config.xml文件里面添加 对商品类型的映射。

修改完后,就不会出现404的问题了。

第二个问题:代码层不建议多写。一个表对应一类代码层。比如:这次的商品类型。那么就写GoodsType。(dao层就是TypeGoodsDao、service层就是TypeService、controller层就是TypeController)

关于代码层,我一开始的作法是分了两个模块,一个添加,一个展示。但是书上要求是在同一个页面展示,最后越做越乱。直到我把代码层的代码全部删除,重新放在一个模块来思考,问题得到解决。

第三个问题:我想知道,数据是如何在这个里面进行传输和储存的。

小结自己的感悟:

1.Controller层 的方法参数要和 Service层 一一对应。

2.像SQL语句这些。若没有从view层传送数据过来,那么controller层的POJO类型始终为空,当然Service层也始终为空。例如:查询所有语句。没有view层传递数据。只需要在view层使用dao层的方法就能获取到数据。但POJO数据始终为空。

3.从view层传递数据过来了(view层数据绑定POJO的属性),那么POJO始终 有这么一条数据。也仅有这一条数据。

4.有一点需要重视,像多个功能放在同一个页面下,那么view层就会存在多个model属性。那么对应功能的方法也会有对应几个的model.add属性。

(并不是对应一个功能,那么在一个方法里面就只写一个model属性。因为最终返回的界面有多个model属性,那么尽管是一个功能的方法,它也要写上所有 和返回界面 里面有的所有model.add属性。否则,只写一个model属性,它最后返回到界面里面会因为发现不了其它model属性而导致报错。并提示,此bean未找到。)

第三个功能:实现商品类型的展现 和 删除。(在每一个类型后边加一个删除)

第一个问题:我发现,我好像不知道,怎么删除商品。(主要商品的删除,应该怎么把数据提交给控制器,然后由控制器进行删除)

删除商品的 sql语句我知道写:delete from goodstype where id = #{id} 

但是,这个id,应该怎么从view层获取过来。

解决:通过JavasScript 函数 提交id给控制器。

 然后在下面编写: 通过使用函数的方法,提交id数据。

在控制器有两种方式 可以获取到这个数据:

第一种,通过Integer 获取。(第一次浏览器输入/delete界面,此时没有点击删除,ID为null。)

第二种,通过 POJO 使用 goodsTypeDao方法使用Mapper.xml文件的SQL映射文件。使用这个方法之后,goodsType的存放的数据就发生改变了。

 

这里需要注意一下,就是,只通过第二种方式,删除数据可以吗?

答案是当然不行:

  因为我们在SQL映射语句是 通过where id = {#id} .

也就是,在Dao层,使用的是delet(Integer id) 的方式 进行删除数据。所以必须需要第一种方式获取传输过来的id .

比较:前面我们使用查询语句 ,插入语句 。它们的类型是POJO类型。

查询、插入的方式:它们是通过表单的形式和POJO的类型进行绑定的,所以只要提交action按钮。就会改变POJO的类型。这和我们使用删除的方式有点不一样。

这里我们点击删除的方式 是传入一个id的数据。然后传给Service层。

总结:写到这个例子,我才差不多理解,在这些代码层里面,数据是如何进行数据的传输的。

例如:删除,是通过传递id编号。使用service层的映射。

           查询、添加 是通过 和POJO的绑定,当点击按钮,就改变POJO的数据,在传递给Service层,使用dao层的映射。

第二个问题:点击删除按钮,页面没有变化,但是数据库显示,数据已被删除。

总结:从《JavaEE 框架整合开发入门到实战》这本书开始学习。

到现在学习到第20章,最后一个电子商务平台的设计与实现。沿途碰见了许多困难,直到现在,或许我应该 转换思路学习了。这本书,不是很好。因为最后一个项目,在我看来,很多地方都没有解释清楚,比如,它们的数据是怎么传递的,以及怎么突然,一个界面就获得了另外一个数据。而且缺少很多数据和属性。

我只搞明白了,对应view层获得或者传入数据,都是通过一个model属性进行传递的。还有很多地方,我并没有搞明白。比如,在实现第三个功能,进行上传图片的操作的时候,我就碰到了困难。看书上的例子,我真的觉得有点莫名其妙。

最后只能实现一个简单的添加商品类,但是做不了上传这个界面。所以此书到此为止了。

当然,此书给我的收获还是很大的,我至少学会了SSM项目的基本搭建,以及学会使用IDEA这个应用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值