都市供求信息网(24)

2.信息审核技术分析

对于信息审核,实现该功能的主要技术就是执行SQL语句更新数据表。首先需要获取信息的ID值,然后生成如下SQL语句:

UPDATE tb_info SET info_state = 1 WHERE (id = ?)

其中id字段的值将通过表单中的隐藏域字段进行传递,在Action处理类中可通过如下代码获取:

String checkID=request.getParameter("checkID")

最后执行该SQL语句更新数据表,完成信息审核操作。

3.信息删除技术分析

与信息审核技术的实现相同,首先获取信息的ID值,然后通过执行SQL语句来实现。该SQL语句如下:

DELETE tb_info WHERE (id = ?)

其中id字段的值将通过表单中的隐藏域字段进行传递,在Action处理类中可通过如下代码获取:

String deleteID=request.getParameter("deleteID")

最后执行该SQL语句更新数据表,完成信息删除操作。

4.信息付费设置技术分析

付费管理技术主要就是执行SQL语句更新数据表,将信息的付费状态设置为“已付费”。该SQL语句如下:

UPDATE tb_info SET info_payfor=1 WHERE (id = ?)

其中id字段的值将通过表单进行传递,在Action处理类中可通过如下代码获取:

String moneyID=request.getParameter("moneyID");

最后执行该SQL语句更新数据表,完成信息付费设置操作。

1.11.3 信息显示的实现过程

后台信息显示用到的数据表:tb_info。

1.在侧栏对应的right.jsp页面中编写实现显示方式的代码

根据信息显示功能的介绍及信息显示的技术分析,在right.jsp页面中编写如下代码:

例程54 代码位置:光盘\TM\01\pages\view\right.jsp

<%@ page import="java.util.Map,java.util.TreeMap" %>

<%@ taglib prefix="s2" uri="/struts-tags" %>

<%

Map checkState=new TreeMap(); //用来存储“审核状态”中的选项

checkState.put("1","已审核"); //Map对象的key值存储选项的值,value存储选项的标签

checkState.put("0","未审核");

checkState.put("all","全部");

Map payforState=new TreeMap(); //用来存储“付费状态”中的选项

payforState.put("1","已付费"); //Map对象的key值存储选项的值,value存储选项的标签

payforState.put("0","未付费");

payforState.put("all","全部");

request.setAttribute("checkState",checkState); //将Map对象保存在request范围内,以便radio标签遍历该Map

对象生成一组单选按钮

request.setAttribute("payforState",payforState); //同上

%>

<s2:form action="admin_ListShow.action?" theme="simple">

<table>

<tr><td colspan="2">

<fieldset>

<legend>★付费状态</legend>

<s2:radio list="#request.payforState" name="showType.payforType" value="%{showType.payforType}"/>

</fieldset>

<fieldset>

<legend>★审核状态</legend>

<s2:radio list="#request.checkState" name="showType.stateType" value="%{showType.stateType}"/>

</fieldset>

</td></tr>

<tr><td>

信息类别:<s2:select emptyOption="true" list="#session.typeMap" name="showType.infoType"/>

<s2:submit value="显示"/>

</td></tr>

</table>

</s2:form>

……//省略了显示付费设置界面的代码

代码中用到了Struts 2.0中的radio标签,其用法与select标签相同,可查看1.8.3节“信息发布实现过程”中对select标签的讲解。

2.创建JavaBean:AdminShowType

根据信息显示的技术分析,需要创建一个JavaBean来保存显示方式中的选择状态,实际上就是用来封装表单数据。关键代码如下:

例程55 代码位置:光盘\TM\01\src\com\yxq\model\AdminShowType.java

package com.yxq.model;

public class AdminShowType {

private String stateType; //保存审核状态

private String payforType; //保存付费状态

private int infoType; //保存信息类别

……//省略了属性的setXXX()与getXXX()方法

}

3.在AdminAction类中实现处理后台信息列表显示的方法

AdminAction类用来处理后台管理员请求的操作,其中后台信息列表所显示的请求是在该类中的ListShow()方法中处理的,在该方法中,首先需要获取管理员选择的显示方式,所以在调用该方法之前,需要验证管理员是否选择了显示方式及信息类别,可创建validateListShow()验证方法实现,其代码可查看本书附带光盘。下面介绍ListShow()方法的实现代码。

例程56 代码位置:光盘\TM\01\src\com\yxq\action\AdminAction.java

int infoType=showType.getInfoType(); //获取选择的“信息类别”

String payforType=showType.getPayforType(); //获取选择的“付费状态”

String stateType=showType.getStateType(); //获取选择的“审核状态”

session.put("infoType",Integer.valueOf(infoType)); //保存已选择的“信息类别”

session.put("payforType",payforType); //保存已选择的“付费状态”

session.put("stateType",stateType); //保存已选择的“审核状态”

然后通过判断是否选中“付费状态”与“审核状态”中的“全部”单选按钮来生成相应的SQL语句。实现代码如下:

例程57 代码位置:光盘\TM\01\src\com\yxq\action\AdminAction.java

String sqlall=""; //用来保存查询所有记录的SQL语句

String sqlsub=""; //用来保存查询指定页中记录的SQL语句

Object[] params=null;

String mark ="";

int perR=8; //设置每页显示的记录数

if(!stateType.equals("all")&&!payforType.equals("all")){

mark="1";

sqlall="SELECT * FROM tb_info WHERE (info_type=?) AND (info_state=?) AND (info_payfor=?) ORDER BY info_date DESC";

sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) AND (info_state=?) AND (info_payfor=?) ORDER BY info_date DESC";

params=new Object[3]; //声明一个大小为3的对象数组

params[0]=Integer.valueOf(infoType); //保存设置info_type字段的值

params[1]=stateType; //保存设置info_state字段的值

params[2]=payforType; //保存设置info_payfor字段的值

}else if(stateType.equals("all")&&payforType.equals("all")){

mark="2";

sqlall="SELECT * FROM tb_info WHERE (info_type=?) ORDER BY info_date DESC";

sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) ORDER BY info_date DESC";

params=new Object[1]; //声明一个大小为1的对象数组

params[0]=Integer.valueOf(infoType); //保存设置info_type字段的值

}else if(payforType.equals("all")){

mark="3";

sqlall="SELECT * FROM tb_info WHERE (info_type=?) AND (info_state=?) ORDER BY info_date DESC";

sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) AND (info_state=?) ORDER BY info_date DESC";

params=new Object[2]; //声明一个大小为2的对象数组

params[0]=Integer.valueOf(infoType); //保存设置info_type字段的值

params[1]=stateType; //保存设置info_state字段的值

}else if(stateType.equals("all")){

mark="4";

sqlall="SELECT * FROM tb_info WHERE (info_type=?) AND (info_payfor=?) ORDER BY info_date DESC";

sqlsub="SELECT TOP "+perR+" * FROM tb_info WHERE (info_type=?) AND (info_payfor=?) ORDER BY info_date DESC";

params=new Object[2]; //声明一个大小为2的对象数组

params[0]=Integer.valueOf(infoType); //保存设置info_type字段的值

params[1]=payforType; //保存设置info_payfor字段的值

}

代码贴士

没有同时选中“付费状态”与“审核状态”的“全部”单选按钮。

同时选中了“付费状态”与“审核状态”的“全部”单选按钮。

选中了“付费状态”中的“全部”单选按钮,“审核状态”任意。

选中了“审核状态”中的“全部”单选按钮,“付费状态”任意。

以上代码中加粗的SQL语句用来查询符合条件的第一页所包含的记录,其中变量perR表示每页显示的记录数。

接着获取存储分页信息的CreatePage类对象。实现代码如下:

例程58 代码位置:光盘\TM\01\src\com\yxq\action\AdminAction.java

String strCurrentP=request.getParameter("showpage"); //获取当前页码

String gowhich="admin_ListShow.action"; //设置分页超链接请求的资源

OpDB myOp=new OpDB(); //创建一个业务处理对象

CreatePage createPage=myOp.OpCreatePage(sqlall, params,perR,strCurrentP,gowhich); //调用OpDB类中的

OpCreatePage()方法计算出总记录数、总页数,并且设置当前页码,这些信息都封装到createPage对象中

读书导航