正文

都市供求信息網(wǎng)(13)

JSP項(xiàng)目開發(fā)案例全程實(shí)錄(第2版) 作者:明日科技


1.7.3 列表顯示信息的實(shí)現(xiàn)過程

列表顯示信息用到的數(shù)據(jù)表:tb_info和tb_type。

本節(jié)將分別介紹首頁信息的列表顯示的實(shí)現(xiàn)過程和列表顯示某類別中所有信息的實(shí)現(xiàn)過程。

1.首頁信息的列表顯示實(shí)現(xiàn)過程

首頁信息的列表顯示,分為付費(fèi)信息和免費(fèi)信息的列表顯示兩種。下面先介紹列表顯示付費(fèi)信息的實(shí)現(xiàn)過程。

列表顯示付費(fèi)信息的實(shí)現(xiàn)過程。

(1)創(chuàng)建JavaBean:InfoSingle。根據(jù)前面的技術(shù)分析,需要將從信息表中查詢出的已通過審核的付費(fèi)信息封裝到JavaBean中,然后保存到List集合對象中。所以先來創(chuàng)建這個(gè)JavaBean,該JavaBean中的每個(gè)屬性要對應(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; //信息標(biāo)題

private String infoContent; //信息內(nèi)容

private String infoLinkman; //聯(lián)系人

private String infoPhone; //聯(lián)系電話

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ǎng)站首頁請求的Action類:IndexAction。Struts 2.0中的Action類通常繼承自com.opensymphony.xwork2.ActionSupport類,在Action類中可以實(shí)現(xiàn)execute()方法,當(dāng)請求轉(zhuǎn)發(fā)給Action類時(shí),Action類會自動調(diào)用execute()方法來處理請求,這與Struts之前版本中Action類的處理是相同的。InexAction類中用來生成保存付費(fèi)信息的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 { //實(shí)現(xiàn)Action類的execute()方法,該方法返回String型值

/* 查詢所有收費(fèi)信息,按發(fā)布時(shí)間降序排列 */

OpDB myOp=new OpDB(); //創(chuàng)建一個(gè)處理業(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èi)信息,按發(fā)布時(shí)間降序排列 */

……//代碼省略

return SUCCESS; //返回Action類的最終靜態(tài)常量SUCCESS,其值為success

}

static{ //靜態(tài)代碼塊,在IndexAction類第一次被調(diào)用時(shí)執(zhí)行

OpDB myOp=new OpDB();

/* 初始化所有信息類別 */

String sql="select * from tb_type order by type_sign";

typeMap=myOp.OpGetListBox(sql,null); //調(diào)用業(yè)務(wù)對象中實(shí)現(xiàn)初始化信息類別的方法,返回TreeMap對象

if(typeMap==null)

typeMap=new TreeMap();

/* 初始化搜索功能的下拉列表框選項(xiàng) */

……//代碼省略

}

}

在static靜態(tài)代碼塊中,主要進(jìn)行初始化操作。OpGetListBox()方法返回的TypeMap對象存儲了信息類別,具體代碼可查看1.5.2節(jié)業(yè)務(wù)處理類中介紹的OpGetListBox()方法。該TypeMap對象中存儲的內(nèi)容如圖1.37所示。

 

例程26中代碼在調(diào)用業(yè)務(wù)處理對象的OpListShow()方法后,獲取了存儲付費(fèi)信息的List集合對象,然后將該List集合對象保存到request對象中。在Struts 2.0的Action類中若要使用HttpServletRequest、HttpServletResponse類對象,必須使該Action類繼承ServletRequestAware和ServletResponseAware接口。另外,如果僅僅是對會話進(jìn)行存取數(shù)據(jù)的操作,則可繼承SessionAware接口,否則可通過HttpServletRequest類對象的getSession()方法來獲取會話。Action類在繼承這些接口后,必須實(shí)現(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接口必須實(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;

}

}

 


上一章目錄下一章

Copyright ? 讀書網(wǎng) leeflamesbasketballcamps.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號