Month: August 2008

利用 pager-taglib :增、删记录后如何回到分页了的记录列表

    如果页面上存在一个按时间排序的记录列表,当我们增加了一条记录,应该跳转到记录的最后面,以看到刚刚增加的记录;当我们删除了一条记录,应该跳转到被删除记录的原来差不多的地方,以方便用户继续操作。    如果列表是分页的,那么增加记录后应该是跳到最后一页;对于删除记录,删除前应把当前页码记下,删除后跳转到  <b> Min(最后一页,删除前的页码) </b>     可以用 pager-taglib 来实现这两种机制。首先,它可以分页,可以让我们免于自己实现分页;其次,利用它分页后想跳转到某页只须在 url 里加上 pager.offset = 某页 即可,方便程序的实现。      具体的实现方法:       1.增加记录         a.用户提交“增加记录”的表单,表单域中需包含隐藏变量:“每页记录数”         b.服务器增加记录后,从数据库中算出记录的总数         c.利用每页记录数和记录总数算出最后一页的pager.offset值         d.跳转到该页       2.删除记录         a.用户提交“删除记录”的表单,表单域中需包含隐藏变量:“每页记录数”和“当前页码”         b.服务器删除记录后,从数据库中算出记录的总数         c.利用每页记录数和记录总数算出最后一页的pager.offset值         d.求出 最后一页的页码 和 删除前的页码 中间的较小值         e.跳转到这个较小值所代表的页面    DisplayTag为什么不行? 因为利用它分页后如果想跳到某页,在url里要加上的东西是不确定的,URL中它的分页参数名值对 有时是 d-48098-p = 某页, 有时是  d-23456-p …

利用 pager-taglib :增、删记录后如何回到分页了的记录列表 Read More »

使用HttpClient要注意的问题

1.每次执行一个Method都要release connection,而且要放到finally块里release 2. ONE multi-trhread httpclient = n httpconnections。对同一个Host的默认连接数只有2 3.执行method.getResponseBodyXXX()方法时,responseBody已经下载到本地。所以,执行这种方法时,程序不会访问网络。

部分hibernate笔记

CGLIB要求被代理有类有一个无参的构造函数,所以用HIBERNATE定义BO时一定要有一个无参的构造函数 hibernate3的merge可以解决 一个session中有多个ID相同的对象 的问题 如果业务方法被transaction manager包住,那么,执行业务如在逻辑上发现不能进行CRUD操作,应该主动抛出异常,以使事务回滚  如果要做一个线程不停地扫描数据库,不要让这个线程成为bean本身,而要让它查找bean 否则的话,如果线程代表的bean被改变了,线程也不会意识到这个变化。 hql的where子句中判断xx 是否为null 的写法是,  xx is(not) null 关于many-to-one属性值为CGLIB代理对象的问题 1.看清楚关键值,对症下药: hibernate, many-to-one,enhancerBycglib, no session 2.是否将many-to-one 设置成lazy="true",如果是,请略过第3步 3.是否使用的是hibernate3,并且没有设置lazy属性? 4.是否在逻辑层管理session,但是在web层使用数据对象? 5.改成lazy=’false’..end. 6.是否将many-to-one 设置成lazy="falze",现象依旧? 7.检查数据库内的外键字段,因为可能没有体现many-to-one的外键了,而依据主动方引用的主键是不存在的.. 8.建立外键. 9.依然没有解决…去下个hibernate_ref 仔细看看,你需要补充知识了 10.问题解决. hibernate3连class本身的lazy都默认为proxy,所以最好将hibernate-mapping的default-lazy置为false hibernate映射中的cascade与数据库的外键cascade完全不一样: 设A引用B,设置cascade="delete",是指当删除A时,hibernate自动为你删除B, 而在关系数据库中,为A对B的引用关系设置“级联删除”,是指当删除B时,数据库自动为你删除A