是不是该换个模式看待MVC
admin 发布于:2010-04-26 16:54:00
阅读:loading
传统,也就是我以前在MVC下做一个增删改查的方式,功能有显示列表、添加、修改、删除,需要的组件有.do,service,javabean,先来说说做一个大列表吧,首先需要请求.do地址,.do调用service中的查询数据库列表的方法,然后返回一个集合(List),.do保存这个集合,然后页面地址跳转到.jsp 中,jsp借助于jstl标签来迭代集合,显示数据。需要分页的话,这个dao还得再加一点代码,.jsp也需要加点代码,常常的应用中,这点东西是经常用到的,确又是一样的,接着说说一个添加功能吧,.do获取form表单的数据,然后调用dao方法,插入数据库中,然后再转向到jsp列表中,再接着说说修改的功能吧,修改就需要一步修改前的加载了,将这条需要修改数据该写在文本框的写在文本框,该选中的下拉框选中,该选中的单选按钮选中等等,然后再保存在一个范围内,再再jsp页面中做显示的工作,删除的工作就不说了。这些都是业务简单而频繁写的东西。别小看这点东西,我们大家都会,可是当写一个这么点增删改查的时候,用多少时间呢?开发效率有多高呢?
我以前写过好几版的分页标签,意义就是在解决这个查询分页显示的问题,止在解决通用的问题,我是从通用的javabean下手的,几版全部都没有用到javabean组件,后来工程涛说了,面向对象编程,你的对象呢,hibernate的vo(pojo)也是一个javabean,struts的formbean也是一个javabean,我想想确实还是要一个javabean吧。
现在,首先要做一个大列表,且看看这里的页面列表,用表格显示:
1、表格的标题
<tr align="center">
<td>编号</td>
<td>账号</td>
<td>密码</td>
<td>状态</td>
<td>年龄</td>
<td>操作</td>
</tr>
2、表格的内容
<my:db beans="com.account.Account" list="accountlist" sql="select * from Account"
noData="<tr><td colspan='6' align='center'>没有数据!</td></tr>">
</my:db>
这是一个自定义标签,
意义说明:
1、sql属性:该语句为查询数据的SQL语句,
2、beans属性:表示这些sql语句查询的数据用哪个javabean来封装
3、list属性:表示javabean封装好的数据,保存在pageContext范围内的属性,该对象为一个集合。
4、noData属性:当SQL语句没有查询到数据的时候,显示的默认值。
5、pageSize属性:每页显示多少条数据,默认为10条。
以上将一个sql语句返回的数据集,以javabean的形式封装好,然后保存在pageContext范围内,当然了,这个属性,只在标签体内有效。至于如何迭代集合数据,则是按找个人喜好来决定,我用jstl 的c:forEach标签迭代,也可以用<% %>来迭代。
如果不需要显示分页的话,默认pageSize属性值为10,所以只能显示10条数据,如果需要加上分页的话,则需要这样写:
在db查询标签内部添加如下:
<my:page/>,
这个标签意义说明:
1、round参数,就是设置显示当前页附近的几页数据,与Google查询显示的样子一样,有下拉框,图:
OK,只需要这么一点点,一个查询的列表就给写好了,当然javabean的编写是有规范的,就是数据库列名与字段名一直,属性名不一定要一致,也就是说,这个sql语句有select .....了多少列,这个javabean就需要多少个字段,当然如果你这个SQL语句查询的是多个表,并且这多个表里面都有相同的字段的话,需要使用别名,保证字段名唯一,不然javabean的属性字段唯一就不成了。
有点麻烦了对吧?别着急,我提供一个自动生成javabean的类,你给我一个包名,也就是包的路径,类名,查询的SQL语句,创建javabean的SQL语句,我来给你自动生成javabean类,使用如下:
ISQL2BeansFactory dao = new BeansFactory();
String sql = "select * from Account";
dao.createJAVABEANFile("tag.beans", "Account", sql);
main方法执行后,javabean文件自动生成好了,这个文件也是比较有规范的,当这个包下面的文件存在的时候,也就是第2次执行这个方法创建javabean的时候,就提示文件存在,不允许创建的错误信息。创建好的javabean文件,也是一个javabean文件,书写也是比较规范的,并且正确无误的使用,完全依赖你的sql语句。
这个查询列表的就说到这里了吧。
3、添加和修改前的加载
在添加信息的时候,页面上为几个空的表单,但是在修改的时候,这些表单需要该赋值的赋值,改选中的选中,这些操作,我这里省略了修改前的加载这一步,点击修改直接查看这个修改的数据,传递某个id等,跟据条件查询出这条数据,该赋值的自动给赋值好,该选中的自动选中,现在我的修改做到了,你直接点击修改按钮,然后转到这个页面,就给自动选中了,当然了,这靠的还是我的db查询标签,根据这个id来查询这条数据,虽然这个db标签返回的是一个,集合,但是这里明显只有1条数据,所以说用jstl的c:forEach的话就可以这样${acclist[0].username}这样就是username的值了,其他的一样。直接让你提交处理。
添加的时候,form表单肯定是按照这个javabean的属性来的,所以我直接将你的form表单的值给封装到这个javabean的值中,所以该保存就直接保存了。这个将form表单的数据赋值到javabean中的例子,详细可以见这里的描述:http://haiyangyiba.javaeye.com/blog/643030(可下载)
这几步操作以经有了,还确什么呢?还缺就是一个公用统一的.do来处理这些业务,然后跳转了。
说了这么多,其实就是实现了分页标签,修改数据自动选中,添加将form表单的数据,将值赋值于javabean属性.......
点赞