都市供求信息网(13)

1.7.3 列表显示信息的实现过程

列表显示信息用到的数据表:tb_info和tb_type。

本节将分别介绍首页信息的列表显示的实现过程和列表显示某类别中所有信息的实现过程。

1.首页信息的列表显示实现过程

首页信息的列表显示,分为付费信息和免费信息的列表显示两种。下面先介绍列表显示付费信息的实现过程。

列表显示付费信息的实现过程。

(1)创建JavaBean:InfoSingle。根据前面的技术分析,需要将从信息表中查询出的已通过审核的付费信息封装到JavaBean中,然后保存到List集合对象中。所以先来创建这个JavaBean,该JavaBean中的每个属性要对应表中的字段。代码如下:

例程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; //信息内容

private String infoLinkman; //联系人

private String infoPhone; //联系电话

private String infoEmail; //E-mail地址

private String infoDate; //信息发布时间

private String infoState; //信息审核状态

private String infoPayfor; //信息付费状态

……//省略了属性的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)创建处理访问网站首页请求的Action类:IndexAction。Struts 2.0中的Action类通常继承自com.opensymphony.xwork2.ActionSupport类,在Action类中可以实现execute()方法,当请求转发给Action类时,Action类会自动调用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 { //实现Action类的execute()方法,该方法返回String型值

/* 查询所有收费信息,按发布时间降序排列 */

OpDB myOp=new OpDB(); //创建一个处理业务的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); //调用业务对象中获取信息列表的方法,返回List对象

request.setAttribute("payforlist",payforlist); //保存List对象到request对象中

session.put("typeMap",typeMap); //保存typeMap对象

/* 查询免费信息,按发布时间降序排列 */

……//代码省略

return SUCCESS; //返回Action类的最终静态常量SUCCESS,其值为success

}

static{ //静态代码块,在IndexAction类第一次被调用时执行

OpDB myOp=new OpDB();

/* 初始化所有信息类别 */

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

typeMap=myOp.OpGetListBox(sql,null); //调用业务对象中实现初始化信息类别的方法,返回TreeMap对象

if(typeMap==null)

typeMap=new TreeMap();

/* 初始化搜索功能的下拉列表框选项 */

……//代码省略

}

}

在static静态代码块中,主要进行初始化操作。OpGetListBox()方法返回的TypeMap对象存储了信息类别,具体代码可查看1.5.2节业务处理类中介绍的OpGetListBox()方法。该TypeMap对象中存储的内容如图1.37所示。

 

例程26中代码在调用业务处理对象的OpListShow()方法后,获取了存储付费信息的List集合对象,然后将该List集合对象保存到request对象中。在Struts 2.0的Action类中若要使用HttpServletRequest、HttpServletResponse类对象,必须使该Action类继承ServletRequestAware和ServletResponseAware接口。另外,如果仅仅是对会话进行存取数据的操作,则可继承SessionAware接口,否则可通过HttpServletRequest类对象的getSession()方法来获取会话。Action类在继承这些接口后,必须实现接口中定义的方法。在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接口必须实现的方法

this.session=session;

}

public void setServletRequest(HttpServletRequest request) { //继承ServletRequestAware接口必须实现的方法

this.request=request;

}

public void setServletResponse(HttpServletResponse response) {//继承ServletResponseAware接口必须实现的方法

this.response=response;

}

}

 

读书导航