亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

dwr簡介--一個例子(續)

系統 1612 0
抱歉這篇才寫。上班沒有多少時間啊!
TableModelBean.java 這是核心業務類,既要被Action使用又要被dwr使用。
由于我注釋寫了一些,所以就不詳細介紹了
public ? class ?TableModelBean? {
????
????
// 表格的第一列
???? public ? static ?final? int ?COLUMN_1? = ? 0 ;
????
????
// 表格的第二列
???? public ? static ?final? int ?COLUMN_2? = ? 1 ;
????
????
// 表格的第三列
???? public ? static ?final? int ?COLUMN_3? = ? 2 ;

????
// 每一列的排序升序降序標記?true升序,false降序
???? private ?boolean[]?columnFlags? = ? {? false ,? false ,? false ?} ;
????
????
// 表格分頁總頁面數
???? private ? int ?totalPage? = ? 0 ;
????
????
// 表格當前頁
???? private ? int ?currentPage? = ? 0 ;
????
????
// 表格總行數
???? private ? int ?rowsCount? = ? 0 ;

????
// 沒用
???? private ?String[]?pagers? = ? {? "" ?} ;

????
// 存放全體記錄的容器
???? private ?List?rows? = ? new ?ArrayList();

????
// 存放當前記錄的容器
???? private ?List?currentPageRows? = ? new ?ArrayList();

????
// 數據庫操作類
???? private ? static ?ModelOneDAO?dao;

????
// 每頁記錄數設為20
???? private ? static ?final? int ?PAGE_SIZE? = ? 20 ;

????
// 初始排序行為第一行
???? private ? int ?sortedColumn? = ? 1 ;

????
/**/ /* *
?????*??構造函數
?????
*/

????
public ?TableModelBean()? {
????????dao?
= ? new ?ModelOneDAO();
????????init();
????}


????
/**/ /* *
?????*??初始化
?????
*/

????
private ? void ?init()? {
????????
try ? {
????????????rows?
= ?dao.getSortedRows(sortedColumn,?columnFlags[sortedColumn]);
????????????setRowsCount(rows.size());
????????????setTotalPage(getTotalPageByRow(rows.size(),?PAGE_SIZE));
????????????setCurrentPage(
1 );
????????}
? catch ?(SQLException?e)? {
????????????
// ?TODO?Auto-generated?catch?block
????????????e.printStackTrace();
????????}

????}


????
/**/ /* *
?????*?返回當前頁的內容
?????*?@return?Returns?the?currentPage.
?????
*/

????
public ? int ?getCurrentPage()? {
????????
return ?currentPage;
????}


????
/**/ /* *
?????*?設置當前頁
?????*?@param?currentPage
?????*????????????The?currentPage?to?set.
?????
*/

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

????????currentPageRows.clear();
????????
int ?firstIndex? = ?PAGE_SIZE? * ?(currentPage? - ? 1 );
????????
int ?lastIndex? = ?(firstIndex? + ?PAGE_SIZE)? < ?rowsCount? ? ?firstIndex
????????????????
+ ?PAGE_SIZE?:?rowsCount;
????????
for ?( int ?i? = ?firstIndex;?i? < ?lastIndex;?i ++ )? {
????????????currentPageRows.add(rows.
get (i));
????????}

????}


????
/**/ /* *
?????*?取得所有行
?????*?@return?Returns?the?rows.
?????
*/

????
public ?List?getRows()? {
????????
return ?rows;
????}



????
/**/ /* *
?????*?取的分頁數
?????*?@return?Returns?the?totalPage.
?????
*/

????
public ? int ?getTotalPage()? {
????????init();
????????
return ?totalPage;
????}


????
/**/ /* *
?????*?設置分頁數
?????*?@param?totalPage
?????*????????????The?totalPage?to?set.
?????
*/

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


????
/**/ /* *
?????*?取得紀錄數
?????*?@return?Returns?the?totalRows.
?????
*/

????
public ? int ?getRowsCount()? {
????????
return ?rowsCount;
????}


????
/**/ /* *
?????*????設置記錄數
?????*??@param?totalRows
?????*????????????The?totalRows?to?set.
?????
*/

????
public ? void ?setRowsCount( int ?rowsCount)? {
????????
this .rowsCount? = ?rowsCount;
????}


????
/**/ /* *
?????*?取得當前頁中的記錄數
?????*?@return?Returns?the?currentPageRows.
?????
*/

????
public ?List?getCurrentPageRows()? {
????????
return ?currentPageRows;
????}


????
/**/ /* *
?????*?取得page頁中的記錄,當page大于totalPage時返回最后頁
?????*?因為是上面的getCurrentPageRows函數的重載,所以在dwr中不能正常使用。
?????*?于是出現了getRowsByPageNo方法。
?????*?@param?page
?????*?@return?the?currentPageRows.
?????
*/

????
public ?List?getCurrentPageRows( int ?page)? {
????????currentPageRows.clear();
????????
int ?firstIndex? = ?PAGE_SIZE? * ?(page? - ? 1 );
????????
int ?lastIndex? = ?(firstIndex? + ?PAGE_SIZE)? < ?rowsCount? ? ?firstIndex
????????????????
+ ?PAGE_SIZE?:?rowsCount;
????????
for ?( int ?i? = ?firstIndex;?i? < ?lastIndex;?i ++ )? {
????????????currentPageRows.add(rows.
get (i));
????????}

????????
return ?currentPageRows;
????}


????
/**/ /* *
?????*?取得page頁中的記錄,當page大于totalPage時返回最后頁
?????*?@param?page
?????*?@return?包含當前頁記錄的List
?????
*/

????
public ?List?getRowsByPageNo( int ?page)? {
????????init();
????????page?
= ?page? > ?totalPage? ? ?totalPage?:?page;
????????List?result?
= ? new ?ArrayList();
????????
int ?firstIndex? = ?PAGE_SIZE? * ?(page? - ? 1 );
????????
int ?lastIndex? = ?(firstIndex? + ?PAGE_SIZE)? < ?rowsCount? ? ?firstIndex
????????????????
+ ?PAGE_SIZE?:?rowsCount;
????????
for ?( int ?i? = ?firstIndex;?i? < ?lastIndex;?i ++ )? {
????????????result.add(rows.
get (i));
????????}

????????
return ?result;
????}


????
/**/ /* *
?????*?按照某一列進行排序,再返回當前頁中的數據
?????*?@param?currentPage
?????*?@param?columnNo
?????*?@return?the?Rows?of?current?Page?that?sorted?by?columnNo
?????
*/

????
public ?List?getCurrentPageSortedByColumnRows( int ?currentPage,? int ?columnNo)? {
????????init();
????????sortBy(columnNo);
????????currentPageRows.clear();
????????
int ?firstIndex? = ? 20 ? * ?(currentPage? - ? 1 );
????????
int ?lastIndex? = ?(firstIndex? + ? 20 )? < ?rowsCount? ? ?firstIndex? + ? 20
????????????????:?rowsCount;
????????
for ?( int ?i? = ?firstIndex;?i? < ?lastIndex;?i ++ )? {
????????????currentPageRows.add(rows.
get (i));
????????}

????????
return ?currentPageRows;
????}


????
/**/ /* *
?????*?返回一個分頁數組。用處不太大,客戶端用Javascript也可以計算。
?????*?@return?Returns?the?pages.
?????
*/

????
public ?String[]?getPagers()? {
????????pagers?
= ? new ?String[totalPage];
????????
for ?( int ?i? = ? 1 ;?i? <= ?totalPage;?i ++ )? {
????????????pagers[i?
- ? 1 ]? = ?i? + ? "" ;
????????}

????????
return ?pagers;
????}


????
/**/ /* *
?????*?按照某一列進行排序
?????*?@param?columnNo
?????
*/

????
public ? void ?sortBy( int ?columnNo)? {
????????
this .sortedColumn? = ?columnNo;
????????columnFlags[columnNo]?
= ?( ! columnFlags[columnNo]);
????????
try ? {
????????????rows?
= ?dao.getSortedRows(columnNo,?columnFlags[columnNo]);
????????}
? catch ?(SQLException?e)? {
????????????
// ?TODO?Auto-generated?catch?block
????????????e.printStackTrace();
????????}

????}


????
/**/ /* *
?????*?刪除某一列,按照主鍵(第一列)
?????*?@param?key
?????*?@return
?????
*/

????
public ?boolean?deleteRow( int ?key)? {
????????
try ? {
????????????dao.deleteRow(key);
????????}
? catch ?(SQLException?e)? {
????????????e.printStackTrace();
????????????
return ? false ;
????????}

????????
return ? true ;
????}


????
/**/ /* *
?????*?要新增加一個數據前先計算出Id.
?????*?這個例子只是用來演示用的,如果多人訪問會出現并發問題
?????*?@return
?????
*/

????
public ? int ?getNextId()? {
????????
try ? {
????????????
return ?dao.getNextId();
????????}
? catch ?(SQLException?e)? {
????????????e.printStackTrace();
????????????
return ? - 1 ;
????????}

????}


????
/**/ /* *
?????*?增加一行
?????*?@param?trb
?????*?@return
?????
*/

????
public ?boolean?addRow(TableRowBean?trb)? {
????????
try ? {
????????????dao.addRow(trb);
????????????
return ? true ;
????????}
? catch ?(SQLException?e)? {
????????????e.printStackTrace();
????????????
return ? false ;
????????}

????}


????
/**/ /* *
?????*?更改一行
?????*?@param?trb
?????*?@return
?????
*/

????
public ?boolean?updateRow(TableRowBean?trb)? {
????????
try ? {
????????????dao.updateRow(trb);
????????????
return ? true ;
????????}
? catch ?(SQLException?e)? {
????????????e.printStackTrace();
????????????
return ? false ;
????????}

????}


????
/**/ /* *
?????*?按照key取回單行信息
?????*?@param?key
?????*?@return
?????
*/

????
public ?TableRowBean?getSingleRow( int ?key)? {
????????TableRowBean?row;
????????
try ? {
????????????row?
= ?dao.getSingleRow(key);
????????}
? catch ?(SQLException?e)? {
????????????row?
= ? new ?TableRowBean();
????????????e.printStackTrace();
????????}

????????
return ?row;
????}


????
/**/ /* *
?????*?輔助方法計算分頁數
?????*?@param?rowSize
?????*?@param?pageSize
?????*?@return
?????
*/

????
private ? static ? int ?getTotalPageByRow( int ?rowSize,? int ?pageSize)? {
????????
int ?result? = ? 0 ;
????????result?
= ?rowSize? % ?pageSize? == ? 0 ? ? ?rowSize? / ?pageSize?:?rowSize
????????????????
/ ?pageSize? + ? 1 ;
????????
return ?result;
????}

}
接下來就是寫配置文件了。主要的配置文件有三個web.xml struts-config.xml dwr.xml
web.xml
<? xml?version="1.0"?encoding="ISO-8859-1" ?>
<! DOCTYPE?web-app?PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
?????????????????????????"http://java.sun.com/dtd/web-app_2_3.dtd"
>
< web-app >
????
< filter >
????????
< filter-name > EncodingFilter </ filter-name >
????????
< filter-class > org.mstar.strutsajax.EncodingFilter </ filter-class >
????????
< init-param >
????????????????
< param-name > encoding </ param-name >
????????????????
< param-value > gb2312 </ param-value >
????????
</ init-param >
????
</ filter >
????
< servlet >
????????
< servlet-name > action </ servlet-name >
????????
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
????????
< init-param >
????????????
< param-name > config </ param-name >
????????????
< param-value > /WEB-INF/struts-config.xml </ param-value >
????????
</ init-param >
????????
< load-on-startup > 1 </ load-on-startup >
????
</ servlet >
????
< servlet >
????????
< servlet-name > dwr-invoker </ servlet-name >
????????
< display-name > DWR?Servlet </ display-name >
????????
< description > Direct?Web?Remoter?Servlet </ description >
????????
< servlet-class > uk.ltd.getahead.dwr.DWRServlet </ servlet-class >
????????
< init-param >
????????????
< param-name > config </ param-name >
????????????
< param-value > WEB-INF/dwr.xml </ param-value >
????????
</ init-param >
????????
< init-param >
????????????
< param-name > debug </ param-name >
????????????
< param-value > true </ param-value >
????????
</ init-param >
????????
< load-on-startup > 1 </ load-on-startup >
????
</ servlet >
????
< servlet-mapping >
????????
< servlet-name > action </ servlet-name >
????????
< url-pattern > *.do </ url-pattern >
????
</ servlet-mapping >
????
< servlet-mapping >
????????
< servlet-name > dwr-invoker </ servlet-name >
????????
< url-pattern > /dwr/* </ url-pattern >
????
</ servlet-mapping >
????
< welcome-file-list >
????????
< welcome-file > index.jsp </ welcome-file >
????????
< welcome-file > login.jsp </ welcome-file >
????
</ welcome-file-list >
????
< taglib >
????????
< taglib-uri > /WEB-INF/struts-bean </ taglib-uri >
????????
< taglib-location > /WEB-INF/struts-bean.tld </ taglib-location >
????
</ taglib >
????
< taglib >
????????
< taglib-uri > /WEB-INF/struts-logic </ taglib-uri >
????????
< taglib-location > /WEB-INF/struts-logic.tld </ taglib-location >
????
</ taglib >
????
< taglib >
????????
< taglib-uri > /WEB-INF/struts-html </ taglib-uri >
????????
< taglib-location > /WEB-INF/struts-html.tld </ taglib-location >
????
</ taglib >
</ web-app >
其中要注意這段Servlet的聲明
< servlet >
????????
< servlet-name > dwr-invoker </ servlet-name >
????????
< display-name > DWR?Servlet </ display-name >
????????
< description > Direct?Web?Remoter?Servlet </ description >
????????
< servlet-class > uk.ltd.getahead.dwr.DWRServlet </ servlet-class >
????????
< init-param >
????????????
< param-name > config </ param-name >
????????????
< param-value > WEB-INF/dwr.xml </ param-value >
????????
</ init-param >
????????
< init-param >
????????????
< param-name > debug </ param-name >
????????????
< param-value > true </ param-value >
????????
</ init-param >
????????
< load-on-startup > 1 </ load-on-startup >
????
</ servlet >
debug打開的話,你就可以看到每一個遠程調用。對開發很有用。
struts-config我就不寫了,大家對這個比較了解,要看的話,下載我的源碼,在最后面我會寫上。
重點是dwr.xml.這里是你要提供遠程接口信息
<? xml?version="1.0"?encoding="UTF-8" ?>
<! DOCTYPE?dwr?PUBLIC?"-//GetAhead?Limited//DTD?Direct?Web?Remoting?1.0//EN"?"http://www.getahead.ltd.uk/dwr/dwr10.dtd" >

< dwr >
????
< init >
????????
< converter? id ="tablerowbean" ?class ="org.mstar.strutsajax.converter.TableRowConverter" />
??????
</ init >
????
< allow >
????????
< create? creator ="new" ?javascript ="UserLogic" >
????????????
< param? name ="class" ?value ="org.mstar.strutsajax.ajax.UserLogic" />
????????????
< include? method ="validate" />
????????
</ create >
????????
< create? creator ="new" ?javascript ="TableModel" ?scope ="session" >
????????????
< param? name ="class" ?value ="org.mstar.strutsajax.form.TableModelBean" />
????????????
< include? method ="sortBy" />
????????????
< include? method ="getRowsCount" />
????????????
< include? method ="getTotalPage" />
????????????
< include? method ="setCurrentPage" />
????????????
< include? method ="getCurrentPageRows" />
????????????
< include? method ="getCurrentPageSortedByColumnRows" />
????????????
< include? method ="getRowsByPageNo" />
????????????
< include? method ="deleteRow" />
????????????
< include? method ="getNextId" />
????????????
< include? method ="addRow" />
????????????
< include? method ="updateRow" />
????????????
< include? method ="getSingleRow" />
????????
</ create >
???????? < convert? converter ="tablerowbean" ?match ="org.mstar.strutsajax.form.TableRowBean" />
????
</ allow >
</ dwr >
詳細配置你可以看dwr的文檔。
這里要說的就是,convert,對于你自己的類型如TableRowBean必須寫一個Converter來轉化它,我的TableRowConverter其實就是繼承與BeanConverter然后什么事情也沒做。但是我如果自己用BeanConverter就不行,不知道為什么。其他的都比較好理解。
當然我還有一個weblogic.xml,因為我是發布在weblogic上的。
<? xml?version="1.0"?encoding="UTF-8" ?>
<! DOCTYPE?weblogic-web-app?PUBLIC?"-//BEA?Systems,?Inc.//DTD?Web?Application?8.1//EN"????"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd" >
< weblogic-web-app >
????
< jsp-descriptor >
????????
< jsp-param >
????????????
< param-name > debug </ param-name >
????????????
< param-value > true </ param-value >
????????
</ jsp-param >
????
</ jsp-descriptor >
????
< context-root > struts-ajax </ context-root >
</ weblogic-web-app >
剩下了就是JSP頁面了。我再寫一篇吧。

dwr簡介--一個例子(續)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91精品免费国产高清在线 | 米奇7777| 一级毛片免费不卡在线 | 高级毛片| 女人的毛片 | 香蕉久草在线 | 亚洲一区二区天海翼 | 五月婷婷综合网 | 日本四虎影院 | 99热久久久久久久免费观看 | 久久97久久97精品免视看 | 国产h版大片在线播放 | 亚洲欧美国产毛片在线 | 久久香蕉国产线看观看乱码 | 天天干天天干天天 | 日韩亚洲欧美性感视频影片免费看 | 国产a级网站 | 在线视频一二三区2021不卡 | 天天射天天干天天插 | 亚洲精品久久精品h成人 | 成人午夜网站 | 精品国产一区二区三区不卡 | 爱爱视频在线观看 | 好看的亚洲视频 | 狠狠色噜噜狠狠狠狠888奇米 | 亚洲在线一区二区 | 天天摸天天碰色综合网 | 操天天 | 四虎影视永久在线 | 在线观看精品国内福利视频 | 波多野结衣一区二区三区四区 | 日本高中生一级乇片 | 日本不卡在线视频高清免费 | 正在播放国产乱子伦视频 | 国产成人禁片在线观看 | 一级欧美一级日韩毛片99 | 日韩一区二区不卡中文字幕 | 日本tv欧美tv天堂 | 欧美末成年videos在线观看 | 91精品国产色综合久久不卡蜜 | 亚洲系列在线 |