正文

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

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


2.信息審核技術(shù)分析

對于信息審核,實現(xiàn)該功能的主要技術(shù)就是執(zhí)行SQL語句更新數(shù)據(jù)表。首先需要獲取信息的ID值,然后生成如下SQL語句:

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

其中id字段的值將通過表單中的隱藏域字段進行傳遞,在Action處理類中可通過如下代碼獲取:

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字段的值將通過表單中的隱藏域字段進行傳遞,在Action處理類中可通過如下代碼獲取:

String deleteID=request.getParameter("deleteID")

最后執(zhí)行該SQL語句更新數(shù)據(jù)表,完成信息刪除操作。

4.信息付費設置技術(shù)分析

付費管理技術(shù)主要就是執(zhí)行SQL語句更新數(shù)據(jù)表,將信息的付費狀態(tài)設置為“已付費”。該SQL語句如下:

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

其中id字段的值將通過表單進行傳遞,在Action處理類中可通過如下代碼獲?。?/p>

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

最后執(zhí)行該SQL語句更新數(shù)據(jù)表,完成信息付費設置操作。

1.11.3 信息顯示的實現(xiàn)過程

后臺信息顯示用到的數(shù)據(jù)表:tb_info。

1.在側(cè)欄對應的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存儲選項的標簽

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

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

Map payforState=new TreeMap(); //用來存儲“付費狀態(tài)”中的選項

payforState.put("1","已付費"); //Map對象的key值存儲選項的值,value存儲選項的標簽

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

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

request.setAttribute("checkState",checkState); //將Map對象保存在request范圍內(nèi),以便radio標簽遍歷該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>

……//省略了顯示付費設置界面的代碼

代碼中用到了Struts 2.0中的radio標簽,其用法與select標簽相同,可查看1.8.3節(jié)“信息發(fā)布實現(xiàn)過程”中對select標簽的講解。

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)”中的“全部”單選按鈕來生成相應的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ù)

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); //保存設置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的對象數(shù)組

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的對象數(shù)組

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的對象數(shù)組

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

params[1]=payforType; //保存設置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"); //獲取當前頁碼

String gowhich="admin_ListShow.action"; //設置分頁超鏈接請求的資源

OpDB myOp=new OpDB(); //創(chuàng)建一個業(yè)務處理對象

CreatePage createPage=myOp.OpCreatePage(sqlall, params,perR,strCurrentP,gowhich); //調(diào)用OpDB類中的

OpCreatePage()方法計算出總記錄數(shù)、總頁數(shù),并且設置當前頁碼,這些信息都封裝到createPage對象中


上一章目錄下一章

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