ssm整合:添加书籍功能
我们做添加功能就是在前端中点击超链去跳转到Controller层去执行添加的方法最后再传递到显示结果的页面中去。
第一步我们先去把功能页面做添加,在页面中去添加一个添加书籍的超链部分:
然后我们去写Controller中的方法:
我们现在其实可以叫面向Controller编程:
我们先不去写里面具体的实现方法,我们的思路都是先测试看是否能正常跳转,再去编写功能。
我们把主页的添加书籍部分改一下,不然可能有点丑:
增加书籍的前端页面:
我们运行一下:
点击新增书籍的按钮:
我们发现现在跳转页面没有问题,接下来就是实现功能:
我们先把添加书籍的前端页面补充完整:
我们去看一下现在的页面:
现在页面已经完整了,接下来去想怎么把前端传入的数据和数据库中的数据做连接。
当我们点击allBook页面中的添加书籍按钮跳转到Controller中的toAddBook方法然后跳转到添加书籍页面,当输入完信息后跳转到我们现在要写的添加功能的Controller层方法最后再跳转到Controller层查询方法回到allBook页面。
最后我们把前端页面的地址定位为Controller的地址,并且在前端页面的输入框中定义其name,每个标签的name要和实体类名称一一对应:
运行:
点击新增书籍按钮:
添加功能写完了。
其实如果不算我们在前端页面上的设计的话,我们现在就是一对一的编程,就是写controller然后把controller和前端页面联系在一起。
ssm整合:修改删除书籍
我们在前端页面增加操作,看看现在的前端页面效果:
我们新建一个修改书籍的jsp页面:
这部分比较简单,我们修改书籍和添加书籍的页面几乎差不多直接把添加书籍的页面内容复制过来改一改就可以了。
我们先写跳转到修改页面的controller:
但是这个跳转的方法我们还没有写完:
这个方法智能的话是我们点击修改哪本书,当从这个controller方法跳转到修改页面时,我们会把我们想要修改的书籍的原信息带出来。所以在前端我们要获取我们所修改的书籍的id然后获取到其原来的值。
我们在主页跳转到controller时给它传入一个id值
controller层接到传来的id时查找对应id的书籍信息并传给前端修改页面
修改页面接收controller层传来的数据值。
我们运行一下看看:
我们点击修改按钮:
我们发现我们可以查到原来的信息。现在页面跳转几乎没什么问题了,我们要做修改功能的controller层方法:
我们功能也写完了,也完成了和前端页面的绑定,我们去运行测试一下:
点击修改按钮:
我们去修改它的名称:
我们发现我们的修改功能没有起到任何的作用。名称并未发生改变。说明我们的代码是有问题的。
原因是我们没有把id传到修改页面中导致修改页面接收不到id,传入数据库时数据库语句id为0,数据库语句运行失败。
但是我们又不能把id直接传入,所以我们要把它传入隐藏域中。
我们去运行一下:
修改成功。
删除操作:
在前端把删除的地址加上。这里我们没有用问号传值,我们复习一下RestFull风格。
然后我们在controller层写删除方法:
运行一下:
我们点击这个删除按钮:
已成功删除。
这样我们增删改查就写完了,我们发现我们学习ssm之后,整合ssm框架确实比较麻烦,但是如果我们把框架构建好之后,我们的逻辑功能部分将变得简单,我们想写什么功能只要让controller层和前端页面去对应去写就行了。都不用去看其它部分。就只写前端页面和controller。
到现在为止,我们把增删改查都写完了,其实一个项目的核心就已经结束了。在项目中其它功能都是基于增删改查的基础上,思维逻辑进行拓展,代码逻辑复杂化。
接下来我们写一个新的功能,去感受下学了框架之后,写项目和之前用java web有什么区别。
ssm整合:新增搜索功能
来个终极整合。这一次是全端改,前端和后端都要改。因为之前我们在dao和service接口都定义了增删改查方法,我们也在mapper.xml中配置了相关的数据库语句。所以我们只要编写controller和前端页面即可。但是现在我们想写个新的方法,通过这个方法可以更全面的理解ssm框架整合。
1.我们现在前端页面添加一个查询按钮:
我们现在启动项目看看页面效果:
可能有点丑我们去把它美化一下:
我们再看一下前端页面:
我们先不去管页面是否美观,我们先去把功能实现。
我们先在controller层写上对应的方法:
我们就给前端把controller配上:
这是我们的一个项目流程,但是我们去访问是自顶向下,设计也是自顶向下,但是我们写代码要从下往上写。为什么这么说呢。因为如果我们从上往下写,我们没写到下一层还要去改前一层的东西容易出错还麻烦,但是我们从下往上写,我们写完一层,这一层就结束了,写下一层的时候就不需要去改动上一层的内容了。
所以我们也按照这个步骤先写dao层:
我们在dao层写完方法我们就去写mapper.xml中配置它的sql语句:
然后我们就在service层增加一个这样的功能:
service接口写完了,当然就是要去写service层的实现类了:
现在我们的底层就写完了,新增一个功能就是这么简单,但是以后在公司,难的地方是sql语句,可能7,8个表联查,sql语句会好几十行都有可能。我们现在就是体会业务流程即可。
接下来我们就去写我们的controller层:
我们根据名称查询书籍的思路是:我们查到的书籍把它传递到一个新的list列表中,再把这个列表在前端体现出来。
接下来我们看看我们的方法好使不好使不:
我们去运行一下:
这个功能我们就写完了。
但是我们发现有一个不符合实际应用的点,就是我们到了这个页面后应该有一个按钮可以让我们去返回到原来显示全部信息的页面去。
所以我们这就来去完善前端页面:
运行一下看看:
点击显示全部书籍按钮:
我们发现还有一个瑕疵,就是如果我们输入查询的名称为空,应该直接显示全部书籍页面,那么我们继续去改动我们的前端页面:
我们只需要加一个小小的判断即可,那么我们要如何把错误提示信息显示到前端页面中呢?
运行测试一下:
我们发现显示了错误信息,但是我们错误信息在前端页面的显示位置出现了错误。
我们去优化一下:
我们之前是把它写在c:foreach循环里了,我们把它写到表单中去这回.。再去运行一下:
点击查询按钮:
返回到之前的页面:
如果查空值:
到这里只是ssm整合部分能做的项目结束了,但是我们这个项目并没有结束,我们的SpringMVC框架还没有学完,我们SpringMVC中还有文件的上传和下载,这块学完我们这个项目中可以上传图片,还有拦截器没有学,用拦截器可以设置登录权限,如果没有权限是访问不到我们当前这个页面的。最后很重要的一部分在SpringMVC中的Ajax还没有学,如果学完Ajax我们可以异步刷新,不需要每一次点击按钮都刷新一遍浏览器。