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对象中