STRUTS通用分页

1、定义通用分页model
package cn.com.bank.mmpf.model;
import cn.com.bank.mmpf.util.Constants;

public class PageControl implements java.io.Serializable{
    private int pageno=1;  //当前页码
    private int pagesize=Constants.PAGE_SIZE_DEFALUT; //每页行数
    private int rowcount; //总行数
    private int pagecount; //总页数
    private boolean useprevious;//前一页是否能用
    private boolean usebehind;//后一页是否能用
    private boolean usepage=true;//是否分页

    public int getPageno() {
        return pageno;
    }
    public void setPageno(int pageno) {
        this.pageno = pageno;
    }
    public int getPagesize() {
        return pagesize;
    }
    public void setPagesize(int pagesize) {
        if (pagesize==0){//0-->不分页
           usepage=false;
           pagecount=1;
           pageno=1;
           useprevious=false;
           usebehind=false;
        }
        this.pagesize = pagesize;
    }
    public int getRowcount() {
        return rowcount;
    }
    public void setRowcount(int rowcount) {
        this.rowcount = rowcount;
        if(usepage){
           pagecount=
           (rowcount % pagesize ==0 )?(rowcount /pagesize ) : ( rowcount /pagesize +1);
           useprevious=pageno==1?false:true;
           usebehind=pageno==pagecount?false:true;
        }
    }
    public int getPagecount() {
        return pagecount;
    }
    public void setPagecount(int pagecount) {
        this.pagecount = pagecount;
    }
    public boolean isUseprevious() {
        return useprevious;
    }
    public void setUseprevious(boolean useprevious) {
        this.useprevious = useprevious;
    }
    public boolean isUsebehind() {
        return usebehind;
    }
    public void setUsebehind(boolean usebehind) {
        this.usebehind = usebehind;
    }
    public boolean isUsepage() {
        return usepage;
    }
    public void setUsepage(boolean usepage) {
        this.usepage = usepage;
    }
}
 
 
2、hibernate分页实现函数--〉放在底层类中
  public class CommonServiceImpl extends HibernateDaoSupport implements CommonService{
  。。。
   //通用分页处理
    public List getListForPage(final String hsql,PageControl pageControl) throws Exception
    {
        List pagelist=null;
        Session session=getSession();
        try {
            pageControl.setRowcount(getTotalCount(session,hsql)); //更新pagecontrol的各种属性 important
            if(pageControl.isUsepage()){ //是否分页
                // sql=hsql+ " limit " + (pageNog-1)*page_size + "," +page_size;
                // offices= getHibernateTemplate().find(sql);
                //被屏蔽掉的是原来的处理
                //以下是改过的处理方法
                Query query=null;
                query=session.createQuery(hsql);
                int start=(pageControl.getPageno()-1)*pageControl.getPagesize();
                int rowNum=pageControl.getPagesize();
                query.setFirstResult(start);
                query.setMaxResults(rowNum);
                pagelist = query.list();
            }else{
                pagelist=session.find(hsql);
            }
        } finally {
            session.close();
        }
        return pagelist;
    }
   //计算表的总行数
    private int getTotalCount(Session session, String hql) throws Exception
    {
        Integer amount = new Integer(0);
        int sql_from = hql.indexOf("from");
        int sql_orderby=hql.indexOf("order by");//为了改进
        String countStr="";
        if(sql_orderby>0)
        {
        countStr="select count(*) "+hql.substring(sql_from,sql_orderby);
        }
        else
        countStr = "select count(*) "+hql.substring(sql_from);
        Query query = session.createQuery(countStr);
        if(!query.list().isEmpty()){
        amount = (Integer) query.list().get(0);
        }
        else
        return 0;
        return amount.intValue();
    }
}
 
 
3、实际service对象继承commonserviceimpl
public class LogServiceImpl extends CommonServiceImpl implements LogService{
    public List getLogByType(Integer logtype, PageControl pageControl) throws Exception{
        String hql="from "+Systemlog.class.getName()+" as a where a.baselogtype.id="+logtype+" order by a.opertime desc";
        return getListForPage(hql,pageControl);
    }
}
 

4、action实现
public class LogListAction extends BaseAction{
    public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception
    {
        String forward =Constants.FORWORD_FIAL;
        LogService service = (LogService) getWebApplicationContext().getBean(Constants.LOG_SERVICE);//获得service对象
        Object obj=((DynaActionForm) actionForm).get(Constants.PAGE_CONTROL_MODEL);
        Object obj1=((DynaActionForm) actionForm).get(Constants.PAGE_FILTER_ID);
        Integer filterid=obj1==null?new Integer(1):(Integer)obj1;
        PageControl pageControl=obj==null?new PageControl():(PageControl)obj;
        try {
            List mainlist=service.getLogByType(filterid,pageControl); //调用分页方法得到list
            List filterlist=service.loadAll(Baselogtype.class);
            ((DynaActionForm) actionForm).set(Constants.PAGE_ENTITY_LIST, mainlist);
            ((DynaActionForm) actionForm).set(Constants.PAGE_FILTER_LIST, filterlist);
            ((DynaActionForm) actionForm).set(Constants.PAGE_FILTER_ID,filterid);
            ((DynaActionForm) actionForm).set(Constants.PAGE_CONTROL_MODEL,pageControl);
            forward = Constants.FORWORD_SUCCESS;
        } catch (Exception e) {
            ActionErrors errors = new ActionErrors();
            errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(Constants.ERROR_LIST,e.getMessage()));
            saveErrors(request, errors);
        }
        return actionMapping.findForward(forward);
    }
}
 
 
5、jsp页面
5.1、分页部分代码:
            <logic:greaterThan value="0" name="LogListForm" property="pagecontrolmodel.rowcount">
                <p align="right" style="font-size:12px">
                    共<bean:write name="LogListForm" property="pagecontrolmodel.rowcount"/>行
                    &nbsp;共<bean:write name="LogListForm" property="pagecontrolmodel.pagecount"/>页
                    &nbsp;每页行数
                            <html:select name="LogListForm" property="pagecontrolmodel.pagesize" styleClass="DropDownList" style="width:80px" οnchange="refresh()">
                                <html:option value="0">不分页</html:option>
                                <html:option value="10">10行</html:option>
                                <html:option value="20">20行</html:option>
                                <html:option value="30">30行</html:option>
                                <html:option value="50">50行</html:option>
                                <html:option value="100">100行</html:option>
                            </html:select>
                <logic:equal value="true" name="LogListForm" property="pagecontrolmodel.usepage">
                    <logic:equal value="true" name="LogListForm" property="pagecontrolmodel.useprevious">
                       &nbsp;<a href="javascript:goto(1)">首页</a>
                       &nbsp;<a href="javascript:goto(<bean:write property="pagecontrolmodel.pageno" name="LogListForm"/>-1)">前一页</a>
                    </logic:equal>
                    <logic:equal value="false" name="LogListForm" property="pagecontrolmodel.useprevious">
                       &nbsp;首页
                       &nbsp;前一页
                    </logic:equal>
                    <logic:equal value="true" name="LogListForm" property="pagecontrolmodel.usebehind">
                       &nbsp;<a href="javascript:goto(<bean:write property="pagecontrolmodel.pageno" name="LogListForm"/>+1)">后一页</a>
                       &nbsp;<a href="javascript:goto(<bean:write property="pagecontrolmodel.pagecount" name="LogListForm"/>)">末页</a>
                    </logic:equal>
                    <logic:equal value="false" name="LogListForm" property="pagecontrolmodel.usebehind">
                       &nbsp;后一页
                       &nbsp;末页
                    </logic:equal>
                    &nbsp;跳至<html:text property="pagecontrolmodel.pageno" name="LogListForm" styleClass="TextBox" style="width:20px"/><input type="button" value="go" οnclick="check();">
                </logic:equal>
                </p>
         </logic:greaterThan>      
 

5.2、分页实现配套javascript
      <script>
           function refresh()
           {
              document.all("LogListForm").submit();
           }
           function check()
           {
               var pageno=document.all("pagecontrolmodel.pageno");
               if(!isInt(pageno.value)){alert("非法页数");return;}
               var ipageno=parseInt(pageno.value);
               var imaxno=parseInt(document.all("pagecontrolmodel.pagecount").value);
               if(ipageno<1 || ipageno>imaxno){
                 alert("页数不在允许的范围内!");return;
               }
               refresh();
           }
           function goto(pageno){
              document.all("pagecontrolmodel.pageno").value=pageno;
              check();
           }
      </script>
 
2006/4/16
Tomcat Session 持久化
编辑 %TOMCAT_HOME%/CONF/SERVER.XML
 
<Host appBase="webapps" name="localhost">
 <Context path="/store" docBase="store" debug="0" reloadable="true">
        <Manager className="org.apache.catalina.session.PersistentManager" >
        debug=0;
        saveOnRestart="true"
        maxActiveSessions="-1"
        minIdleSwap="-1"
        maxIdleSwap="-1"
        maxIdleBackup="-1"
       <Store className="org.apache.catalina.session.FileStore" directory="mydir" />
       </Manager>
 </Context>
</Host>
配置Tomcat 数据源&连接池
方式一、全局数据库连接池

1、通过管理界面配置连接池,或者直接在tomcat/conf/server.xml的GlobalNamingResources中增加
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
2、在tomcat/webapps/myapp/META-INF/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
这样就可以了。
3、将jdbc驱动放入 %tomcat_home%/common/lib 中

方式二、全局数据库连接池

1、同上
2、在tomcat/conf/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
3、同上

方式三、局部数据库连接池

只需在tomcat/webapps/myapps/META-INF/context.xml的Context中增加:
<Resource name="jdbc/mydb" type="javax.sql.DataSource" password="mypwd" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" validationQuery="select 1" username="sa" url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb" maxActive="4"/>
参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
 
///--------------------------------------------------------------------------//
一.在tomcat_home/common/lib下放入jdbc的驱动程序,额外说一下,如果是使用sql server的话,有至少两个驱动可以选择,一个是微软提供的,另一个是 jtds,比微软的要好很多,推荐使用
二.配置文件,tomcat 不同的版本配置文件略有不同,下面以tomcat5..5.*为例。
三.如果配置不正确会出现javax.naming.NameNotFoundException: Name is not bound in this Context 错误
以上三种方式在tomcat 5.5.4下都可以。另外,sql server的jdbc driver是从微软网站上下载的sql server jdbc (sp3)。

下面 分别举tomcat5.0 和tomcat 5.5  配置文件 的例子(将此配置文件置于Tomcat /conf/Catalina/localhost 下)
 
tomcat5.0
 <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/test">
        <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>
        <!-- Maximum number of dB connections in pool. Make sure you
             configure your mysqld max_connections large enough to handle
             all of your db connections. Set to 0 for no limit.
             -->
        <parameter>
            <name>maxActive</name>
            <value>100</value>
        </parameter>
        <!-- Maximum number of idle dB connections to retain in pool.
             Set to 0 for no limit.
             -->
        <parameter>
            <name>maxIdle</name>
            <value>30</value>
        </parameter>
        <!-- Maximum time to wait for a dB connection to become available
             in ms, in this example 10 seconds. An Exception is thrown if
             this timeout is exceeded.  Set to -1 to wait indefinitely.
             -->
        <parameter>
            <name>maxWait</name>
            <value>10000</value>
        </parameter>
        <!-- MySQL dB username and password for dB connections  -->
        <parameter>
            <name>username</name>
            <value>sa</value>
        </parameter>
        <parameter>
            <name>password</name>
            <value>test</value>
        </parameter>
        <!-- Class name for JDBC driver -->
        <parameter>
            <name>driverClassName</name>
            <value>net.sourceforge.jtds.jdbc.Driver</value>
        </parameter>
        <!-- Autocommit setting.  This setting is required to make
             Hibernate work.  Or you can remove calls to commit(). -->
        <parameter>
            <name>defaultAutoCommit</name>
            <value>true</value>
        </parameter>
        <!-- The JDBC connection url for connecting to your MySQL dB.
             The autoReconnect=true argument to the url makes sure that the
             mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
             connection.  mysqld by default closes idle connections after 8 hours.
             -->
        <parameter>
            <name>url</name>
            <value>jdbc:jtds:sqlserver://url/filedb;charset=gb2312;autoReconnect=true</value>
        </parameter>
        <!-- Recover abandoned connections -->
        <parameter>
            <name>removeAbandoned</name>
            <value>true</value>
        </parameter>
        <!-- Set the number of seconds a dB connection has been idle
             before it is considered abandoned.
             -->
        <parameter>
            <name>removeAbandonedTimeout</name>
            <value>60</value>
        </parameter>
        <!-- Log a stack trace of the code which abandoned the dB
             connection resources.
             -->
        <parameter>
            <name>logAbandoned</name>
            <value>true</value>
        </parameter>
    </ResourceParams>
 
tomcat 5.5
  <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
              maxActive="100" maxIdle="30" maxWait="10000"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              username="test" password="test"
              url="jdbc:oracle:thin:@url:1521:dcdb"
              defaultAutoCommit="true" removeAbandoned="true"
              removeAbandonedTimeout="60" logAbandoned="true"/>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值