七郎's JavaBlog

          草木竹石皆可為劒。至人之用人若鏡,不將不迎,應(yīng)而不藏,故能勝物而不傷。
          posts - 60, comments - 14, trackbacks - 0, articles - 0

               摘要:   <%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ include file="/pub/include/common.jsp"%> <html> <head> <title...  閱讀全文

          posted @ 2008-07-17 15:14 七郎歸來(lái) 閱讀(530) | 評(píng)論 (0)編輯 收藏

          我的是用第二種解決的
          (1)在appendChild或者innerHTML操作處判斷document.readyState=="complete", 若為否,則setTimeout若干秒之后重新作這個(gè)操作。但是,此屬性只對(duì)ie,opeara有效,ff的document沒(méi)有readyState屬性,永遠(yuǎn)是undefined.

          (2)在script中使用defer屬性。意在頁(yè)面加載完畢后再執(zhí)行腳本,這樣可以避免找不到對(duì)象的問(wèn)題。defer不會(huì)考慮外部文件是否全部下載完,只會(huì)判當(dāng)前頁(yè)面是否全部加載完成。并且,有defer標(biāo)簽的代碼塊里不能寫(xiě)document.write方法
                  例如:<SCRIPT LANGUAGE="JavaScript" src="<%=path%>/pub/js/myDateControler/WdatePicker.js" defer="defer"></Script>
          (3)標(biāo)簽是否沒(méi)有閉合

          posted @ 2008-07-14 15:16 七郎歸來(lái) 閱讀(5820) | 評(píng)論 (10)編輯 收藏

          window   ->   Preferences   ->   General   ->   Keys

          1、刪掉word completion的快捷鍵設(shè)置alt+/

          2、把Content Assist的快捷鍵由ctrl+space改成alt+/

          posted @ 2008-07-10 17:54 七郎歸來(lái) 閱讀(1556) | 評(píng)論 (0)編輯 收藏

          SQL語(yǔ)句里將字符串轉(zhuǎn)換數(shù)字類型
          select * from internal_external_rating_info order by convert(int,internal_rating)  
          select * from internal_external_rating_info order by CAST(internal_rating AS INT)

          posted @ 2008-07-10 17:02 七郎歸來(lái) 閱讀(5620) | 評(píng)論 (0)編輯 收藏

          屏蔽js錯(cuò)誤,讓狀態(tài)欄不顯示錯(cuò)誤提示
          <script language="javascript">
          <!--
          /*屏蔽所有的js錯(cuò)誤*/
          function killerrors() {
          return true;
          }
          window.onerror = killerrors;
          //-->
          </script>

          posted @ 2008-07-09 17:26 七郎歸來(lái) 閱讀(357) | 評(píng)論 (0)編輯 收藏

          如果傳參中包含%><?等特殊字符 需要編碼處理
          頁(yè)面端 JS 
                          var postString = encodeURI(document.getElementById("postStringAll").value, "UTF-8"); //編碼
                          
          后臺(tái)端  String postString =java.net.URLDecoder.decode(f.getPostString(),"UTF-8");

          posted @ 2008-07-09 17:24 七郎歸來(lái) 閱讀(184) | 評(píng)論 (0)編輯 收藏

          1.JdbcTemplateExtend .java
          package rms.pub.main.web.test;

          import java.util.List;
          import java.util.Map;
          import javax.sql.*;
          import org.springframework.dao.DataAccessException;
          import org.springframework.jdbc.core.JdbcTemplate;
          import org.springframework.jdbc.core.RowMapper;

          public class JdbcTemplateExtend extends JdbcTemplate {
           private DataSource dataSource;

           /**
            * 默認(rèn)構(gòu)造器,調(diào)用此方法初始化,需要調(diào)用setDataSource設(shè)置數(shù)據(jù)源
            */
           public JdbcTemplateExtend() {
           }

           /**
            * 初始構(gòu)造器
            *
            * @param dataSource
            *            數(shù)據(jù)源
            */
           public JdbcTemplateExtend(DataSource dataSource) {
            this.dataSource = dataSource;
            super.setDataSource(dataSource);
           }

           /**
            * 普通分頁(yè)查詢<br>
            * <b>如果結(jié)果結(jié)合比較大應(yīng)該調(diào)用setFetchsize() 和setMaxRow兩個(gè)方法來(lái)控制一下,否則會(huì)內(nèi)存溢出</b>
            *
            * @see #setFetchSize(int)
            * @see #setMaxRows(int)
            * @param sql
            *            查詢的sql語(yǔ)句
            * @param startRow
            *            起始行
            * @param rowsCount
            *            獲取的行數(shù)
            * @return
            * @throws DataAccessException
            */
           @SuppressWarnings("unchecked")
           public List<Map> queryForListPage(String sql, int startRow, int rowsCount)
             throws DataAccessException {
            return queryForListPage(sql, startRow, rowsCount,
              getColumnMapRowMapper());
           }

           /**
            * 自定義行包裝器查詢<br>
            * <b>如果結(jié)果結(jié)合比較大應(yīng)該調(diào)用setFetchsize() 和setMaxRow兩個(gè)方法來(lái)控制一下,否則會(huì)內(nèi)存溢出</b>
            *
            * @see #setFetchSize(int)
            * @see #setMaxRows(int)
            * @param sql
            *            查詢的sql語(yǔ)句
            * @param startRow
            *            起始行
            * @param rowsCount
            *            獲取的行數(shù)
            * @param rowMapper
            *            行包裝器
            * @return
            * @throws DataAccessException
            */
           @SuppressWarnings("unchecked")
           public List<Map> queryForListPage(String sql, int startRow, int rowsCount,
             RowMapper rowMapper) throws DataAccessException {
            return (List) query(sql, new SplitPageResultSetExtractor(rowMapper,
              startRow, rowsCount));
           }

           public DataSource getDataSource() {
            return dataSource;
           }

           public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
            super.setDataSource(dataSource);
           }
          }


          2. SplitPageResultSetExtractor .java

          package rms.pub.main.web.test;

          import java.sql.*;
          import java.util.*;
          import org.springframework.dao.DataAccessException;
          import org.springframework.jdbc.core.ResultSetExtractor;
          import org.springframework.jdbc.core.RowMapper;
          import org.springframework.util.Assert;

          public class SplitPageResultSetExtractor implements ResultSetExtractor {
           private final int start;// 起始行號(hào)
           private final int len;// 結(jié)果集合的長(zhǎng)度
           private final RowMapper rowMapper;// 行包裝器

           public SplitPageResultSetExtractor(RowMapper rowMapper, int start, int len) {
            Assert.notNull(rowMapper, "RowMapper is required");
            this.rowMapper = rowMapper;
            this.start = start;
            this.len = len;
           }

           /**
            * 處理結(jié)果集合,被接口自動(dòng)調(diào)用,該類外邊不應(yīng)該調(diào)用
            */
           public Object extractData(ResultSet rs) throws SQLException,
             DataAccessException {
            List result = new ArrayList();
            int rowNum = 0;
            int end = start + len;
            point: while (rs.next()) {
             ++rowNum;
             if (rowNum < start) {
              continue point;
             } else if (rowNum >= end) {
              break point;
             } else {
              result.add(this.rowMapper.mapRow(rs, rowNum));
             }
            }
            return result;
           }
          }


          posted @ 2008-06-20 12:44 七郎歸來(lái) 閱讀(1122) | 評(píng)論 (0)編輯 收藏

               摘要:   學(xué)了很久的java,接觸SSH也有一段時(shí)間了,寫(xiě)成博文總是有點(diǎn)懶,最近在整理一些思緒,把SSH一點(diǎn)一滴放進(jìn)博客里,以備以后改進(jìn),再學(xué)習(xí)。  以我自己的了解,在進(jìn)行struts開(kāi)發(fā)的過(guò)程中,總也是出現(xiàn)很多的亂碼問(wèn)題 ,但歸根到底,也只是以下三種情況:  ㈠頁(yè)面顯示中文亂碼  ㈡?zhèn)鬟f參數(shù)中文亂碼  ㈢國(guó)際化資源文...  閱讀全文

          posted @ 2008-06-18 17:13 七郎歸來(lái) 閱讀(258) | 評(píng)論 (0)編輯 收藏

          使用POI提取Word文件的文本內(nèi)容

          POI是Apache的一個(gè)開(kāi)源項(xiàng)目,可以到Apache網(wǎng)站下載相應(yīng)的jar包文件,及其源文件。

          POI提供了提取一些非TXT文本中文本內(nèi)容的API,比如提取Word,Excel等,使用起來(lái)非常方便。

          為了說(shuō)明POI提起Word文件的方便和簡(jiǎn)單,通過(guò)提取一個(gè)Word文件的文本來(lái),來(lái)了解POI API的功能。

          假設(shè)在本地磁盤(pán)中存在一個(gè)Word文件

          E:POIwordJBoss3.0 下配置和部署EJB簡(jiǎn)介.doc文件是具有格式的,內(nèi)容如圖所示:

          下面看看提取它的內(nèi)容是多么簡(jiǎn)單。

          首先從Apache網(wǎng)站上下載POI的相關(guān)jar包。

          新建一個(gè)測(cè)試類:

          package org.shirdrn.word;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.IOException;

          import org.apache.poi.hwpf.extractor.WordExtractor;

          public class MyWordExtractor {

          public static void main(String[] args) {
             File file = new File("E:\POI\word\JBoss3.0 下配置和部署EJB簡(jiǎn)介.doc");
             try {
              FileInputStream fis = new FileInputStream(file);
              WordExtractor wordExtractor = new WordExtractor(fis);
              System.out.println("【 使用getText()方法提取的Word文件的內(nèi)容如下所示:】");
              System.out.println(wordExtractor.getText());
             } catch (FileNotFoundException e) {
              e.printStackTrace();
             } catch (IOException e) {
             e.printStackTrace();
          }
          }
          }

          提取Word文件的文本內(nèi)容,打印到控制臺(tái)上,如下所示:

          使用WordExtractor類的getTextFromPieces()方法提取:

          wordExtractor.getTextFromPieces();

          結(jié)果和上面是一樣的。

          WordExtractor類還有一個(gè)可以提取Word文件的各個(gè)段落的方法getParagraphText(),返回一個(gè)String[]數(shù)組,數(shù)組中每個(gè)元素為一個(gè)段的文本內(nèi)容。

          這里,對(duì)Word文件中換行也看成是一個(gè)段,測(cè)試如下:

          package org.shirdrn.word;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.IOException;

          import org.apache.poi.hwpf.extractor.WordExtractor;

          public class MyWordExtractor {

          public static void main(String[] args) {
             File file = new File("E:\POI\word\JBoss3.0 下配置和部署EJB簡(jiǎn)介.doc");
             try {
              FileInputStream fis = new FileInputStream(file);
              WordExtractor wordExtractor = new WordExtractor(fis);
              System.out.println("【 使用getText()方法提取的Word文件的內(nèi)容如下所示:】");
              String[] paragraph = wordExtractor.getParagraphText();
              System.out.println("該Word文件共有"+paragraph.length+"段。");
              for(int i=0;i
               System.out.println("< 第 "+(i+1)+" 段的內(nèi)容為 >");
               System.out.println(paragraph[i]);
              }
             } catch (FileNotFoundException e) {
              e.printStackTrace();
             } catch (IOException e) {
             e.printStackTrace();
          }
          }
          }

          提取Word文件的文本內(nèi)容,打印到控制臺(tái)上,如下所示:

          從上面的Word文件可以看出,最后一行是Word文件的一個(gè)換行符,使用WordExtractor提取時(shí),也把它默認(rèn)成為一個(gè)段,因?yàn)橐粋€(gè)段結(jié)束后應(yīng)該有一個(gè)回車(chē)換行符。

          如果有多個(gè)Word文件,而且放在不同的目錄下,要提取它們的文本內(nèi)容,可以實(shí)現(xiàn)一個(gè)遞歸的函數(shù),通過(guò)深度遍歷,為每一個(gè)Word文件進(jìn)行提取。

          如果需要,可以將提取到的Word文件的文本內(nèi)容輸出到本地磁盤(pán)中,比如以txt記事本的根式保存。

          從上面可以看出,提取Word文件的文本內(nèi)容,實(shí)際上是將Word文件的格式去掉了,獲取到文本的內(nèi)容。

          posted @ 2008-06-12 15:48 七郎歸來(lái) 閱讀(1460) | 評(píng)論 (0)編輯 收藏

          Spring+Hibernate+Struts實(shí)現(xiàn)分頁(yè)

          Spring集成Hibernate,使得SessionFactory的管理更加方便,可以方便地獲取到一個(gè)HibernateTempalte的模板實(shí)例,對(duì)數(shù)據(jù)庫(kù)的操作非常方便。

          Spring集成Struts,先把Struts的Action用Spring的ActionSupport抽象出來(lái),比如定義一個(gè)名稱為SpringAction的的ActionSupport的子類,其中SpringAction中啟動(dòng)IoC容器,通過(guò)ApplicationContext獲取業(yè)務(wù)bean。這需要使用一個(gè)Struts插件來(lái)初始化IoC容器,從而獲取到一個(gè)ApplicationContext。可以通過(guò)讓每個(gè)具體的Action(每個(gè)具體的Action意思是實(shí)現(xiàn)Struts的Action的子類)都繼承自上面定義的SpringAction,實(shí)現(xiàn)對(duì)模型的調(diào)用,以及派發(fā)視圖。

          下面通過(guò)實(shí)現(xiàn)分頁(yè)來(lái)說(shuō)明。

          實(shí)現(xiàn)思路

          Spring集成Hibernate,直接使用Hibernatede配置文件hibernate.cfg.xml,注入一個(gè)SessionFactory,從而在DAO中獲取到一個(gè)HibernateTemplate。

          (注意,下面工程結(jié)構(gòu)中,實(shí)際上包org.shirdrn.spring.dao及其包org.shirdrn.spring.daoImpl中的接口和類并沒(méi)有使用到。)

          org.shirdrn.spring.util.Page類是一個(gè)頁(yè)面的實(shí)體類,沒(méi)有加入任何分頁(yè)邏輯,而實(shí)現(xiàn)分頁(yè)邏輯的抽象是在org.shirdrn.spring.util.PageUtil類中,該類是對(duì)所有需要實(shí)現(xiàn)分頁(yè)的業(yè)務(wù)對(duì)象分頁(yè)邏輯的抽象,而且PageUtil類繼承自HibernateDaoSupport類,它是一個(gè)具有特殊業(yè)務(wù)需(分頁(yè))要的DAO,只是為獲取分頁(yè)結(jié)果而定義的,只要注入一個(gè)SessionFactory就可以方便地檢索數(shù)據(jù)庫(kù)了。所有的具體的業(yè)務(wù)對(duì)象如果需要分頁(yè)顯示的數(shù)據(jù)庫(kù)記錄,都可以從繼承PageUtil類。

          包org.shirdrn.spring.pages中有一個(gè)MyUserPage類,該類繼承自PageUtil類,是一個(gè)具體實(shí)現(xiàn)分頁(yè)邏輯的類,只對(duì)MyUser實(shí)體(對(duì)應(yīng)數(shù)據(jù)庫(kù)中myUser表)的分頁(yè)進(jìn)行處理。

          開(kāi)發(fā)環(huán)境

          Windows 2003 SP2 + SQL Server 2000 + Eclipse 3.2 + JDK 1.5 + MyEclipse 5.0 + Tomcat 5.5.9 + Spring 2.0 + Hibernate 3.0 + Struts 1.2

          工程結(jié)構(gòu)

          SpringHibernateStrutsPage
          │ .classpath
          │ .myhibernatedata
          │ .mymetadata
          │ .mystrutsdata
          │ .project
          │ .springBeans

          ├─.myeclipse
          ├─src
          │ │ hibernate.cfg.xml
          │ │
          │ └─org
          │      └─shirdrn
          │          ├─spring
          │          │ ├─action
          │          │ │      SpringAction.java
          │          │ │
          │          │ ├─dao
          │          │ │ │ MyUserDAO.java
          │          │ │ │
          │          │ │ └─impl
          │          │ │          MyUserDAOImpl.java
          │          │ │
          │          │ ├─entity
          │          │ │      MyUser.hbm.xml
          │          │ │      MyUser.java
          │          │ │
          │          │ ├─pages
          │          │ │      MyUserPage.java
          │          │ │
          │          │ └─util
          │          │          Page.java
          │          │          PageUtil.java
          │          │
          │          └─struts
          │              │ ApplicationResources.properties
          │              │
          │              └─action
          │                      ListMyUsersAction.java

          └─WebRoot
              │ listmyusers.jsp
              │
              ├─META-INF
              │      MANIFEST.MF
              │
              └─WEB-INF
                  │ .struts-config.mex
                  │ action-servlet.xml
                  │ struts-bean.tld
                  │ struts-config.xml
                  │ struts-html.tld
                  │ struts-logic.tld
                  │ validator-rules.xml
                  │ web.xml
                  │
                  ├─classes
                  │ │ hibernate.cfg.xml
                  │ │
                  │ └─org
                  │      └─shirdrn
                  │          ├─spring
                  │          │ ├─action
                  │          │ │      SpringAction.class
                  │          │ │
                  │          │ ├─dao
                  │          │ │ │ MyUserDAO.class
                  │          │ │ │
                  │          │ │ └─impl
                  │          │ │          MyUserDAOImpl.class
                  │          │ │
                  │          │ ├─entity
                  │          │ │      MyUser.class
                  │          │ │      MyUser.hbm.xml
                  │          │ │
                  │          │ ├─pages
                  │          │ │      MyUserPage$1.class
                  │          │ │      MyUserPage.class
                  │          │ │
                  │          │ └─util
                  │          │          Page.class
                  │          │          PageUtil.class
                  │          │
                  │          └─struts
                  │              │ ApplicationResources.properties
                  │              │
                  │              └─action
                  │                      ListMyUsersAction.class
                  │
                  └─lib

          開(kāi)發(fā)過(guò)程

          (1) Hibernate準(zhǔn)備

          編寫(xiě)Hibernate配置文件hibernate.cfg.xml:

          <?xml version='1.0' encoding='UTF-8'?>
          <!DOCTYPE hibernate-configuration PUBLIC
                    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                    "

          <!-- Generated by MyEclipse Hibernate Tools.                   -->
          <hibernate-configuration>

          <session-factory>
             <property name="dialect">
              org.hibernate.dialect.SQLServerDialect
             </property>
             <property name="connection.url">
              jdbc:microsoft:sqlserver://localhost:1433;databasename=shirdrn
             </property>
             <property name="connection.username">sa</property>
             <property name="connection.password">111111</property>
             <property name="connection.driver_class">
              com.microsoft.jdbc.sqlserver.SQLServerDriver
             </property>
             <property name="myeclipse.connection.profile">MSSQL</property>
             <property name="show_sql">true</property>
             <mapping resource="org/shirdrn/spring/entity/MyUser.hbm.xml" />

          </session-factory>

          </hibernate-configuration>

          實(shí)現(xiàn)Hibernate映射文件MyUser.hbm.xml,及其對(duì)應(yīng)的POJO:

          這個(gè)非常容易,就省略了。

          (2) Spring集成Hibernate

          在/WEB-INF/目錄下面,新建一個(gè)action-servlet.xml的Spring配置文件,因?yàn)楹竺嬉蚐truts集成,所以根據(jù)格式<SERVLETNAME>-servlet.xml,應(yīng)該使用Struts的Servlet映射名稱。

          Spring集成Hibernate,在action-servlet.xml中配置如下:

          <bean id="mySessionFactory"
             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
             <property name="configLocation">
              <value>classpath:hibernate.cfg.xml</value>
             </property>
          </bean>

          (3) 頁(yè)面實(shí)體及分頁(yè)邏輯實(shí)現(xiàn)

          Page是一個(gè)頁(yè)面實(shí)體類,如下:

          package org.shirdrn.spring.util;

          import java.util.List;

          public class Page {
          private int pageSize;
          private int totalPage;
          private int rowCount;
          private int currentPage;
          private int prePage;
          private int nextPage;
          private boolean hasNextPage;    // 是否有下一頁(yè)
          private boolean hasPreviousPage;    // 是否有前一頁(yè)
          private List list;

          public Page(){
             this.pageSize = 10;
          }

          public int getCurrentPage() {
             return currentPage;
          }

          public void setCurrentPage(int currentPage) {
             this.currentPage = currentPage;
          }

          public List getList() {
             return list;
          }

          public void setList(List list) {
             this.list = list;
          }

          public int getNextPage() {
             return nextPage;
          }

          public void setNextPage(int nextPage) {
             this.nextPage = nextPage;
          }

          public int getPageSize() {
             return pageSize;
          }

          public void setPageSize(int pageSize) {
             this.pageSize = pageSize;
          }

          public int getPrePage() {
             return prePage;
          }

          public void setPrePage(int prePage) {
             this.prePage = prePage;
          }

          public int getRowCount() {
             return rowCount;
          }

          public void setRowCount(int rowCount) {
             this.rowCount = rowCount;
          }

          public int getTotalPage() {
             return totalPage;
          }

          public void setTotalPage(int totalPage) {
             this.totalPage = totalPage;
          }

          public boolean isHasNextPage() {
             return hasNextPage;
          }

          public void setHasNextPage(boolean hasNextPage) {
             this.hasNextPage = hasNextPage;
          }

          public boolean isHasPreviousPage() {
             return hasPreviousPage;
          }

          public void setHasPreviousPage(boolean hasPreviousPage) {
             this.hasPreviousPage = hasPreviousPage;
          }
          }

          PageUtil類是一個(gè)分頁(yè)邏輯的抽象,需要分頁(yè)的話,只需要繼承自它便可以方便地實(shí)現(xiàn)分頁(yè),可見(jiàn),PageUtil可以重用,如下所示:

          package org.shirdrn.spring.util;

          import org.shirdrn.spring.pages.MyUserPage;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          public class PageUtil extends HibernateDaoSupport {
          public Page page;
          public int start;

          public PageUtil(){
            
          }

          public void setPreOrNextBoolean(){
             if(page.getCurrentPage()<=1){
              page.setHasPreviousPage(false);
             }
             else{
              page.setHasPreviousPage(true);
             }
             if(page.getCurrentPage()>=page.getTotalPage()){
              page.setHasNextPage(false);
             }
             else{
              page.setHasNextPage(true);
             }
          }

          public void setCurrentPage(){
             if(start<1){
              page.setCurrentPage(1);
             }
             if(start>page.getTotalPage()){
              page.setCurrentPage(page.getTotalPage());
             }
             page.setCurrentPage(start);
          }

          public void setPrePage(){
             page.setPrePage(page.getCurrentPage()-1);
          }

          public void setNextPage(){
             page.setNextPage(page.getCurrentPage()+1);
          }

          public void setTotalPage(){
             int rowCount = getRowCount();
             int pageSize = page.getPageSize();
             if(rowCount>pageSize){
              if(rowCount%pageSize == 0){
               page.setTotalPage(rowCount/pageSize);
              }
              else{
               page.setTotalPage(1+(rowCount/pageSize));
              }
             }
             else{
              page.setTotalPage(1);
             }
          }

          public void setRowCount(){
             page.setRowCount(getRowCount());
          }


          public int getRowCount(){
             return 0;
          }

          public int getStartIndex(){
             int startIndex = 0;
             if(start<0){
              startIndex = 0;
             }
             else{
              if(start>page.getTotalPage()){
               startIndex = page.getPageSize()*(page.getTotalPage()-1);
              }
              else{
               startIndex = page.getPageSize()*(start-1);
              }
             }
             return startIndex;
          }

          public Page getPage(){
             return page;
          }
          }

          (4) 具體的業(yè)務(wù)對(duì)象分頁(yè)實(shí)現(xiàn)

          這里,MyUser類是一個(gè)POJO,查詢出結(jié)果需要分頁(yè)顯示。

          MyUser的分頁(yè)實(shí)現(xiàn)類為MyUserPage類,它應(yīng)該繼承PageUtil類。因?yàn)镻ageUtil類繼承了HibernateDaoSupport類,所以需要注入一個(gè)SessionFactory,在action-servlet.xml中配置如下所示:

          <bean id="myUserPage" abstract="false"
             class="org.shirdrn.spring.pages.MyUserPage"
             lazy-init="default" autowire="default" dependency-check="default">
             <property name="sessionFactory">
              <ref bean="mySessionFactory"/>
             </property>
          </bean>
          </beans>

          具體地,MyUserPage類實(shí)現(xiàn)如下所示:

          package org.shirdrn.spring.pages;

          import java.sql.SQLException;
          import java.util.List;

          import org.hibernate.HibernateException;
          import org.hibernate.Query;
          import org.hibernate.Session;
          import org.shirdrn.spring.util.Page;
          import org.shirdrn.spring.util.PageUtil;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.orm.hibernate3.HibernateCallback;

          public class MyUserPage extends PageUtil {
          private String hql;

          public void init(int start,String hql){    // 通過(guò)init方法實(shí)現(xiàn)一個(gè)頁(yè)面的初始化
             page = new Page();
             this.hql = hql;
             this.start = start;
             setRowCount();
             setTotalPage();
             setCurrentPage();
             setPrePage();
             setNextPage();
             setPreOrNextBoolean();
          }

          @Override
          public int getRowCount(){
             List list = getHibernateTemplate().find(hql);
             if(list.isEmpty()){
              return 0;
             }
             return list.size();
          }

          @Override
          public Page getPage(){
             List list = (List)getHibernateTemplate().execute(new HibernateCallback(){
              public Object doInHibernate(Session session) throws HibernateException, SQLException {
               Query query = session.createQuery(hql);
               query.setFirstResult(getStartIndex());
               query.setMaxResults(page.getPageSize());
               return query.list();
              }   
             });
             page.setList(list);
             return page;
          }
          }

          上面實(shí)現(xiàn),使用了HQL檢索方式實(shí)現(xiàn)查詢數(shù)據(jù)庫(kù)記錄。

          在MyUserPage中可以使用帶參數(shù)的構(gòu)造方法實(shí)現(xiàn)頁(yè)面的初始化,但是在使用構(gòu)造方法注入的時(shí)候,很容易出錯(cuò),而且不直觀,所以直接通過(guò)調(diào)用實(shí)現(xiàn)的一個(gè)init方法來(lái)初始化。

          (6) Spring集成Struts

          需要在Struts的配置文件struts-config.xml中配置一個(gè)插件,如下所示:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "

          <struts-config>
          <data-sources />
          <form-beans />
          <global-exceptions />
          <global-forwards />
          <action-mappings >
              <action path="/listMyUsers" type="org.shirdrn.struts.action.ListMyUsersAction">
                <forward
                  name="listmyusers"
                  path="/listmyusers.jsp"
                  redirect="true" />
              </action>
          </action-mappings>
          <message-resources parameter="org.shirdrn.struts.ApplicationResources" />
          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
          <set-property property="contextConfigLocation"
             value="/WEB-INF/action-servlet.xml"/>
          </plug-in>

          </struts-config>

          只要這樣配置好,Struts才能初始化Spring的IoC容器,否則Action無(wú)法工作。

          (7) Action的實(shí)現(xiàn)

          SpringAction繼承了Spring的ActionSupport,我們將用它來(lái)替代所有繼承自Struts的Action類的Action。SpringAction的實(shí)現(xiàn)如下所示:

          package org.shirdrn.spring.action;

          import org.shirdrn.spring.pages.MyUserPage;
          import org.springframework.web.struts.ActionSupport;

          public class SpringAction extends ActionSupport {
          public MyUserPage getMyUserPage(){
             return (MyUserPage)getWebApplicationContext().getBean("myUserPage");
          }
          }

          這里,SpringAction就實(shí)現(xiàn)了獲取一個(gè)MyUserPage的實(shí)例的功能,從而通過(guò)這個(gè)實(shí)例實(shí)現(xiàn)分頁(yè)。

          然后,實(shí)現(xiàn)一個(gè)ListMyUsersAction類,它繼承自SpringAction,能夠啟動(dòng)Spring的IoC容器,并且獲取一個(gè)MyUserPage的實(shí)例。ListMyUsersAction類的實(shí)現(xiàn)如下所示:

          package org.shirdrn.struts.action;

          import java.util.List;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;

          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.shirdrn.spring.action.SpringAction;
          import org.shirdrn.spring.pages.MyUserPage;
          import org.shirdrn.spring.util.Page;

          public class ListMyUsersAction extends SpringAction {

          public ActionForward execute(ActionMapping mapping, ActionForm form,
              HttpServletRequest request, HttpServletResponse response) {
             int pno = (new Integer(request.getParameter("pno"))).intValue();
             String hql = "from MyUser";
             MyUserPage myUserPage = getMyUserPage();
             myUserPage.init(pno, hql);
             Page myUserOnePage = myUserPage.getPage();
             List myUserList = myUserPage.getPage().getList();
             HttpSession session = request.getSession();
             session.setAttribute("myUserOnePage", myUserOnePage);
             session.setAttribute("myUserList", myUserList);
             return mapping.findForward("listmyusers");
          }
          }

          (8) 視圖的實(shí)現(xiàn)

          JSP頁(yè)面,使用Struts標(biāo)簽實(shí)現(xiàn)分頁(yè)頁(yè)面的顯示。

          JSP頁(yè)面listmyusers.jsp如下所示:

          <%@ page contentType="text/html;charset=utf-8"%>
          <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
          <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
          <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
          <%
          String path = request.getContextPath();
          String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
          %>
          <html:html locale="true">
          <head>
          <base href="<%=basePath%>">
          <title>查詢記錄列表</title>
          <style type="text/css">
             body{
              background:#000000;
              font-size:12px;
              color:yellow;
             }
             a:link{
              color:yellow;
              text-decoration:none;
             }
             a:hover{
              color:red;
              text-decoration:none;
             }
             a:visited{
              color:yellow;
              text-decoration:none;
             }
          </style>
          </head>
          <body>
              <table width="60%" align="center" bgcolor="green" border="1">
                <tr>
                <th colspan="10">MyUser查詢列表</th>
                </tr>
                <tr align="center">
               <td width="20%"><b>ID</b></td>
                <td width="20%"><b>姓名</b></td>
                <td width="20%"><b>性別</b></td>
                <td width="20%"><b>年齡</b></td>
                <td width="20%"><b>住址</b></td>
                </tr>
                <logic:present name="myUserList">
                  <logic:iterate id="myUser" name="myUserList" type="org.shirdrn.spring.entity.MyUser">
                    <logic:present name="myUser">
                      <tr align="center">
                        <td width="20%" height="10"><bean:write name="myUser" property="id"/></td>
                        <td width="20%" height="10"><bean:write name="myUser" property="userName"/></td>
                        <td width="20%" height="10"><bean:write name="myUser" property="gender"/></td>
                        <td width="20%" height="10"><bean:write name="myUser" property="age"/></td>
                        <td width="20%" height="10"><bean:write name="myUser" property="addr"/></td>
                      </tr>
                    </logic:present>
                  </logic:iterate>
                </logic:present>
              </table>
              <table align="center" width="60%" bgcolor="green" border="1">
              <tr>
                 <td align="center" colspan="10">
                    <logic:present name="myUserOnePage">
                      <html:link page="/listMyUsers.do?pno=1">首頁(yè)</html:link>
                    <logic:equal name="myUserOnePage" property="hasPreviousPage" value="false">上一頁(yè)</logic:equal>
                    <logic:equal name="myUserOnePage" property="hasPreviousPage" value="true">
                     <a href="<%=path%>/listMyUsers.do?pno=<bean:write name="myUserOnePage" property="prePage"/>">上一頁(yè)</a>
                </logic:equal>
                     
                     每頁(yè)<bean:write name="myUserOnePage" property="pageSize"/>條記錄
                     共<bean:write name="myUserOnePage" property="rowCount"/>條記錄
                          當(dāng)前第(<bean:write name="myUserOnePage" property="currentPage"/>/<bean:write name="myUserOnePage" property="totalPage"/>)頁(yè)
                  <logic:equal name="myUserOnePage" property="hasNextPage" value="false">下一頁(yè)</logic:equal>
                  <logic:equal name="myUserOnePage" property="hasNextPage" value="true">
                   <a href="<%=path%>/listMyUsers.do?pno=<bean:write name="myUserOnePage" property="nextPage"/>">下一頁(yè)</a>
                  </logic:equal>
                     <a href="<%=path%>/listMyUsers.do?pno=<bean:write name='myUserOnePage' property='totalPage'/>">末頁(yè)</a>
                  </logic:present>
                </td>
                </tr>
              </table>
          </body>
          </html:html>

          (9) 部署Web應(yīng)用

          配置web.xml文件,如下所示:

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="
          http://localhost:8080/SpringHibernateStrutsPage/listMyUsers.do?pno=1

          就可以看到數(shù)據(jù)的分頁(yè)顯示,效果如圖所示:

           

          OK,就這么容易。

          posted @ 2008-06-12 15:45 七郎歸來(lái) 閱讀(877) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共6頁(yè): 上一頁(yè) 1 2 3 4 5 6 下一頁(yè) 
          主站蜘蛛池模板: 静宁县| 明光市| 阳春市| 昔阳县| 铜川市| 柘城县| 高碑店市| 耒阳市| 京山县| 东方市| 松潘县| 桐梓县| 仙桃市| 芒康县| 房山区| 息烽县| 鸡泽县| 奉节县| 百色市| 成武县| 凌源市| 富宁县| 渑池县| 库伦旗| 八宿县| 绥滨县| 独山县| 新竹市| 吴川市| 昂仁县| 北宁市| 遵义县| 屏东县| 平陆县| 阿鲁科尔沁旗| 通江县| 双流县| 江津市| 浦县| 沅江市| 桂东县|