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