1.7.3 列表顯示信息的實現(xiàn)過程
列表顯示信息用到的數(shù)據(jù)表:tb_info和tb_type。
本節(jié)將分別介紹首頁信息的列表顯示的實現(xiàn)過程和列表顯示某類別中所有信息的實現(xiàn)過程。
1.首頁信息的列表顯示實現(xiàn)過程
首頁信息的列表顯示,分為付費信息和免費信息的列表顯示兩種。下面先介紹列表顯示付費信息的實現(xiàn)過程。
列表顯示付費信息的實現(xiàn)過程。
(1)創(chuàng)建JavaBean:InfoSingle。根據(jù)前面的技術(shù)分析,需要將從信息表中查詢出的已通過審核的付費信息封裝到JavaBean中,然后保存到List集合對象中。所以先來創(chuàng)建這個JavaBean,該JavaBean中的每個屬性要對應(yīng)表中的字段。代碼如下:
例程25 代碼位置:光盤\TM\01\src\com\yxq\model\InfoSingle.java
package com.yxq.model;
public class InfoSingle {
private int id; //信息ID
private int infoType; //信息類型
private String infoTitle; //信息標題
private String infoContent; //信息內(nèi)容
private String infoLinkman; //聯(lián)系人
private String infoPhone; //聯(lián)系電話
private String infoEmail; //E-mail地址
private String infoDate; //信息發(fā)布時間
private String infoState; //信息審核狀態(tài)
private String infoPayfor; //信息付費狀態(tài)
……//省略了屬性的getXXX()與setXXX()方法
public String getSubInfoTitle(int len){ //截取信息標題
if(len<=0||len>this.infoTitle.length())
len=this.infoTitle.length();
return this.infoTitle.substring(0,len);
}
}
(2)創(chuàng)建處理訪問網(wǎng)站首頁請求的Action類:IndexAction。Struts 2.0中的Action類通常繼承自com.opensymphony.xwork2.ActionSupport類,在Action類中可以實現(xiàn)execute()方法,當請求轉(zhuǎn)發(fā)給Action類時,Action類會自動調(diào)用execute()方法來處理請求,這與Struts之前版本中Action類的處理是相同的。InexAction類中用來生成保存付費信息的List集合對象的代碼如下:
例程26 代碼位置:光盤\TM\01\src\com\yxq\action\IndexAction.java
package com.yxq.action;
import java.util.List;
import java.util.TreeMap;
import com.yxq.actionSuper.MySuperAction;
import com.yxq.dao.OpDB;
public class IndexAction extends MySuperAction { // MySuperAction為自定義類,它繼承ActionSupport類
public static TreeMap typeMap; //用來存儲信息類別
public String execute() throws Exception { //實現(xiàn)Action類的execute()方法,該方法返回String型值
/* 查詢所有收費信息,按發(fā)布時間降序排列 */
OpDB myOp=new OpDB(); //創(chuàng)建一個處理業(yè)務(wù)的OpDB類對象
String sql1="select * from tb_info where (info_state='1') and (info_payfor = '1') order by info_date desc";
List payforlist=myOp.OpListShow(sql1,null); //調(diào)用業(yè)務(wù)對象中獲取信息列表的方法,返回List對象
request.setAttribute("payforlist",payforlist); //保存List對象到request對象中
session.put("typeMap",typeMap); //保存typeMap對象
/* 查詢免費信息,按發(fā)布時間降序排列 */
……//代碼省略
return SUCCESS; //返回Action類的最終靜態(tài)常量SUCCESS,其值為success
}
static{ //靜態(tài)代碼塊,在IndexAction類第一次被調(diào)用時執(zhí)行
OpDB myOp=new OpDB();
/* 初始化所有信息類別 */
String sql="select * from tb_type order by type_sign";
typeMap=myOp.OpGetListBox(sql,null); //調(diào)用業(yè)務(wù)對象中實現(xiàn)初始化信息類別的方法,返回TreeMap對象
if(typeMap==null)
typeMap=new TreeMap();
/* 初始化搜索功能的下拉列表框選項 */
……//代碼省略
}
}
在static靜態(tài)代碼塊中,主要進行初始化操作。OpGetListBox()方法返回的TypeMap對象存儲了信息類別,具體代碼可查看1.5.2節(jié)業(yè)務(wù)處理類中介紹的OpGetListBox()方法。該TypeMap對象中存儲的內(nèi)容如圖1.37所示。
例程26中代碼在調(diào)用業(yè)務(wù)處理對象的OpListShow()方法后,獲取了存儲付費信息的List集合對象,然后將該List集合對象保存到request對象中。在Struts 2.0的Action類中若要使用HttpServletRequest、HttpServletResponse類對象,必須使該Action類繼承ServletRequestAware和ServletResponseAware接口。另外,如果僅僅是對會話進行存取數(shù)據(jù)的操作,則可繼承SessionAware接口,否則可通過HttpServletRequest類對象的getSession()方法來獲取會話。Action類在繼承這些接口后,必須實現(xiàn)接口中定義的方法。在IndexAction類的父類MySuperAction中就繼承了這些接口,代碼如下:
例程27 代碼位置:光盤\TM\01\src\com\yxq\actionSuper\MySuperAction.java
package com.yxq.actionSuper;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class MySuperAction extends ActionSupport implements SessionAware,ServletRequestAware,
ServletResponseAware {
protected HttpServletRequest request;
protected HttpServletResponse response;
protected Map session; //session對象的類型為Map
public void setSession(Map session) { //繼承SessionAware接口必須實現(xiàn)的方法
this.session=session;
}
public void setServletRequest(HttpServletRequest request) { //繼承ServletRequestAware接口必須實現(xiàn)的方法
this.request=request;
}
public void setServletResponse(HttpServletResponse response) {//繼承ServletResponseAware接口必須實現(xiàn)的方法
this.response=response;
}
}