JFinal学习笔记
来源:互联网 发布:淘宝助理5.7.9.0下载 编辑:程序博客网 时间:2024/06/07 01:05
在论坛逛,偶然看到这个框架,抱着学习的态度准备探索一下。主要记录一些平时遇到的问题,以做随时查询。
1.问题:数据库查询到结果集后,传值到页面,页面无法用EL表达式取到值。
例如:我在页面用EL表达式${book.id},当查询后跳转到页面的时候会报错,无法找到”id“属性。
分析:用JFinal操作数据库,有两种方式,一种是创建与表对应的实体类并继承Model抽象类,定义一个static final 的dao对象,dao对象并不能用于承载数据,只是方便对数据库的查询操作。
public class Book extends Model<Book>{ /** * */ private static final long serialVersionUID = 1L; public static final Book dao=new Book().dao();}
String sql="select * from book";
当我们使用dao对象的find(String sql)方法时,依次调用find(String sql,Object.. paras),find(Connection conn, String sql, Object… paras),此时已经执行了查询操作并获得了ResultSet结果集,继续调用ModelBuilder类的build(ResultSet rs, Class < ? extends Model> modelClass)方法封装结果集中的数据。
public static final <T> List<T> build(ResultSet rs, Class<? extends Model> modelClass) throws SQLException, InstantiationException, IllegalAccessException { List<T> result = new ArrayList<T>(); //获取结果集中列的类型和属性。 ResultSetMetaData rsmd = rs.getMetaData(); //获取列的数量 int columnCount = rsmd.getColumnCount(); //至于这里为什么要+1,因为源码中的for循环都是从1开始的 String[] labelNames = new String[columnCount + 1]; int[] types = new int[columnCount + 1]; //这个方法中,表中的列名与类型已分别存入labelNames,types buildLabelNamesAndTypes(rsmd, labelNames, types); while (rs.next()) { Model<?> ar = modelClass.newInstance(); Map<String, Object> attrs = ar.getAttrs(); //将根据数据类型的判断,将表中的数据装入对象的Map<String,Object>中 for (int i=1; i<=columnCount; i++) { Object value; if (types[i] < Types.BLOB) value = rs.getObject(i); else if (types[i] == Types.CLOB) value = handleClob(rs.getClob(i)); else if (types[i] == Types.NCLOB) value = handleClob(rs.getNClob(i)); else if (types[i] == Types.BLOB) value = handleBlob(rs.getBlob(i)); else value = rs.getObject(i); attrs.put(labelNames[i], value); } result.add((T)ar); } return result; }
执行完上述代码后,查询到的结果被存放在一个Map < String,Object>中,也就是上述图例中的创建对象时设置的Map < String,Object>,数据不直接存放在对象中,这也就是为什么我们用${book.id}拿不到值的原因了。
解决办法:在实体类Book中重写Model类get(String)方法。
@Override public <T> T get(String attr) { return super.get(attr); }
0 0
- JFinal学习笔记
- jfinal学习笔记一
- jfinal学习笔记一
- JFinal学习笔记一
- JFinal学习笔记二
- Jfinal学习笔记
- JFinal学习笔记
- Jfinal学习笔记一
- jfinal 学习笔记
- JFinal 学习笔记
- JFinal学习笔记
- JFinal框架学习笔记二
- Jfinal初始学习笔记一
- Jfinal框架学习笔记二
- JFinal学习笔记-Interceptor详解
- JFinal学习笔记 Hello world
- JFinal学习笔记 在Tomcat下的JFinal环境配置
- jfinal框架教程-学习笔记(二)
- git分支管理
- Bootstrap横向表单
- Java Socket远程传递录音
- 触犯苹果Guideline 5.2.2
- git工作流程
- JFinal学习笔记
- Bootstrap表单控件
- innodb_additional_mem_pool_size简介
- git查看历史命令
- 用类封装的c的网络库
- Mapreduce
- Bootstrap表单控件状态
- git标签
- idea 2016注册码