2.信息審核技術(shù)分析
對于信息審核,實現(xiàn)該功能的主要技術(shù)就是執(zhí)行SQL語句更新數(shù)據(jù)表。首先需要獲取信息的ID值,然后生成如下SQL語句:
UPDATE tb_info SET info_state = 1 WHERE (id = ?)
其中id字段的值將通過表單中的隱藏域字段進(jìn)行傳遞,在Action處理類中可通過如下代碼獲?。?/p>
String checkID=request.getParameter("checkID")
最后執(zhí)行該SQL語句更新數(shù)據(jù)表,完成信息審核操作。
3.信息刪除技術(shù)分析
與信息審核技術(shù)的實現(xiàn)相同,首先獲取信息的ID值,然后通過執(zhí)行SQL語句來實現(xiàn)。該SQL語句如下:
DELETE tb_info WHERE (id = ?)
其中id字段的值將通過表單中的隱藏域字段進(jìn)行傳遞,在Action處理類中可通過如下代碼獲?。?/p>
String deleteID=request.getParameter("deleteID")
最后執(zhí)行該SQL語句更新數(shù)據(jù)表,完成信息刪除操作。
4.信息付費設(shè)置技術(shù)分析
付費管理技術(shù)主要就是執(zhí)行SQL語句更新數(shù)據(jù)表,將信息的付費狀態(tài)設(shè)置為“已付費”。該SQL語句如下:
UPDATE tb_info SET info_payfor=1 WHERE (id = ?)
其中id字段的值將通過表單進(jìn)行傳遞,在Action處理類中可通過如下代碼獲?。?/p>
String moneyID=request.getParameter("moneyID");
最后執(zhí)行該SQL語句更新數(shù)據(jù)表,完成信息付費設(shè)置操作。
1.11.3 信息顯示的實現(xiàn)過程
后臺信息顯示用到的數(shù)據(jù)表:tb_info。
1.在側(cè)欄對應(yīng)的right.jsp頁面中編寫實現(xiàn)顯示方式的代碼
根據(jù)信息顯示功能的介紹及信息顯示的技術(shù)分析,在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(); //用來存儲“審核狀態(tài)”中的選項
checkState.put("1","已審核"); //Map對象的key值存儲選項的值,value存儲選項的標(biāo)簽
checkState.put("0","未審核");
checkState.put("all","全部");
Map payforState=new TreeMap(); //用來存儲“付費狀態(tài)”中的選項
payforState.put("1","已付費"); //Map對象的key值存儲選項的值,value存儲選項的標(biāo)簽
payforState.put("0","未付費");
payforState.put("all","全部");
request.setAttribute("checkState",checkState); //將Map對象保存在request范圍內(nèi),以便radio標(biāo)簽遍歷該Map
對象生成一組單選按鈕
request.setAttribute("payforState",payforState); //同上
%>
<s2:form action="admin_ListShow.action?" theme="simple">
<table>
<tr><td colspan="2">
<fieldset>
<legend>★付費狀態(tài)</legend>
<s2:radio list="#request.payforState" name="showType.payforType" value="%{showType.payforType}"/>
</fieldset>
<fieldset>
<legend>★審核狀態(tài)</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>
……//省略了顯示付費設(shè)置界面的代碼
代碼中用到了Struts 2.0中的radio標(biāo)簽,其用法與select標(biāo)簽相同,可查看1.8.3節(jié)“信息發(fā)布實現(xiàn)過程”中對select標(biāo)簽的講解。
2.創(chuàng)建JavaBean:AdminShowType
根據(jù)信息顯示的技術(shù)分析,需要創(chuàng)建一個JavaBean來保存顯示方式中的選擇狀態(tài),實際上就是用來封裝表單數(shù)據(jù)。關(guān)鍵代碼如下:
例程55 代碼位置:光盤\TM\01\src\com\yxq\model\AdminShowType.java
package com.yxq.model;
public class AdminShowType {
private String stateType; //保存審核狀態(tài)
private String payforType; //保存付費狀態(tài)
private int infoType; //保存信息類別
……//省略了屬性的setXXX()與getXXX()方法
}
3.在AdminAction類中實現(xiàn)處理后臺信息列表顯示的方法
AdminAction類用來處理后臺管理員請求的操作,其中后臺信息列表所顯示的請求是在該類中的ListShow()方法中處理的,在該方法中,首先需要獲取管理員選擇的顯示方式,所以在調(diào)用該方法之前,需要驗證管理員是否選擇了顯示方式及信息類別,可創(chuàng)建validateListShow()驗證方法實現(xiàn),其代碼可查看本書附帶光盤。下面介紹ListShow()方法的實現(xiàn)代碼。
例程56 代碼位置:光盤\TM\01\src\com\yxq\action\AdminAction.java
int infoType=showType.getInfoType(); //獲取選擇的“信息類別”
String payforType=showType.getPayforType(); //獲取選擇的“付費狀態(tài)”
String stateType=showType.getStateType(); //獲取選擇的“審核狀態(tài)”
session.put("infoType",Integer.valueOf(infoType)); //保存已選擇的“信息類別”
session.put("payforType",payforType); //保存已選擇的“付費狀態(tài)”
session.put("stateType",stateType); //保存已選擇的“審核狀態(tài)”
然后通過判斷是否選中“付費狀態(tài)”與“審核狀態(tài)”中的“全部”單選按鈕來生成相應(yīng)的SQL語句。實現(xiàn)代碼如下:
例程57 代碼位置:光盤\TM\01\src\com\yxq\action\AdminAction.java
String sqlall=""; //用來保存查詢所有記錄的SQL語句
String sqlsub=""; //用來保存查詢指定頁中記錄的SQL語句
Object[] params=null;
String mark ="";
int perR=8; //設(shè)置每頁顯示的記錄數(shù)
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的對象數(shù)組
params[0]=Integer.valueOf(infoType); //保存設(shè)置info_type字段的值
params[1]=stateType; //保存設(shè)置info_state字段的值
params[2]=payforType; //保存設(shè)置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的對象數(shù)組
params[0]=Integer.valueOf(infoType); //保存設(shè)置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的對象數(shù)組
params[0]=Integer.valueOf(infoType); //保存設(shè)置info_type字段的值
params[1]=stateType; //保存設(shè)置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的對象數(shù)組
params[0]=Integer.valueOf(infoType); //保存設(shè)置info_type字段的值
params[1]=payforType; //保存設(shè)置info_payfor字段的值
}
代碼貼士
沒有同時選中“付費狀態(tài)”與“審核狀態(tài)”的“全部”單選按鈕。
同時選中了“付費狀態(tài)”與“審核狀態(tài)”的“全部”單選按鈕。
選中了“付費狀態(tài)”中的“全部”單選按鈕,“審核狀態(tài)”任意。
選中了“審核狀態(tài)”中的“全部”單選按鈕,“付費狀態(tài)”任意。
以上代碼中加粗的SQL語句用來查詢符合條件的第一頁所包含的記錄,其中變量perR表示每頁顯示的記錄數(shù)。
接著獲取存儲分頁信息的CreatePage類對象。實現(xiàn)代碼如下:
例程58 代碼位置:光盤\TM\01\src\com\yxq\action\AdminAction.java
String strCurrentP=request.getParameter("showpage"); //獲取當(dāng)前頁碼
String gowhich="admin_ListShow.action"; //設(shè)置分頁超鏈接請求的資源
OpDB myOp=new OpDB(); //創(chuàng)建一個業(yè)務(wù)處理對象
CreatePage createPage=myOp.OpCreatePage(sqlall, params,perR,strCurrentP,gowhich); //調(diào)用OpDB類中的
OpCreatePage()方法計算出總記錄數(shù)、總頁數(shù),并且設(shè)置當(dāng)前頁碼,這些信息都封裝到createPage對象中