正文

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

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


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

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

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

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

String checkID=request.getParameter("checkID")

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

3.信息刪除技術(shù)分析

與信息審核技術(shù)的實(shí)現(xiàn)相同,首先獲取信息的ID值,然后通過執(zhí)行SQL語(yǔ)句來實(shí)現(xiàn)。該SQL語(yǔ)句如下:

DELETE tb_info WHERE (id = ?)

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

String deleteID=request.getParameter("deleteID")

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

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

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

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

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

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

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

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

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

1.在側(cè)欄對(duì)應(yīng)的right.jsp頁(yè)面中編寫實(shí)現(xiàn)顯示方式的代碼

根據(jù)信息顯示功能的介紹及信息顯示的技術(shù)分析,在right.jsp頁(yè)面中編寫如下代碼:

例程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(); //用來存儲(chǔ)“審核狀態(tài)”中的選項(xiàng)

checkState.put("1","已審核"); //Map對(duì)象的key值存儲(chǔ)選項(xiàng)的值,value存儲(chǔ)選項(xiàng)的標(biāo)簽

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

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

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

payforState.put("1","已付費(fèi)"); //Map對(duì)象的key值存儲(chǔ)選項(xiàng)的值,value存儲(chǔ)選項(xiàng)的標(biāo)簽

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

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

request.setAttribute("checkState",checkState); //將Map對(duì)象保存在request范圍內(nèi),以便radio標(biāo)簽遍歷該Map

對(duì)象生成一組單選按鈕

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

%>

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

<table>

<tr><td colspan="2">

<fieldset>

<legend>★付費(fèi)狀態(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>

……//省略了顯示付費(fèi)設(shè)置界面的代碼

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

2.創(chuàng)建JavaBean:AdminShowType

根據(jù)信息顯示的技術(shù)分析,需要?jiǎng)?chuàng)建一個(gè)JavaBean來保存顯示方式中的選擇狀態(tài),實(shí)際上就是用來封裝表單數(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; //保存付費(fèi)狀態(tài)

private int infoType; //保存信息類別

……//省略了屬性的setXXX()與getXXX()方法

}

3.在AdminAction類中實(shí)現(xiàn)處理后臺(tái)信息列表顯示的方法

AdminAction類用來處理后臺(tái)管理員請(qǐng)求的操作,其中后臺(tái)信息列表所顯示的請(qǐng)求是在該類中的ListShow()方法中處理的,在該方法中,首先需要獲取管理員選擇的顯示方式,所以在調(diào)用該方法之前,需要驗(yàn)證管理員是否選擇了顯示方式及信息類別,可創(chuàng)建validateListShow()驗(yàn)證方法實(shí)現(xiàn),其代碼可查看本書附帶光盤。下面介紹ListShow()方法的實(shí)現(xiàn)代碼。

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

int infoType=showType.getInfoType(); //獲取選擇的“信息類別”

String payforType=showType.getPayforType(); //獲取選擇的“付費(fèi)狀態(tài)”

String stateType=showType.getStateType(); //獲取選擇的“審核狀態(tài)”

session.put("infoType",Integer.valueOf(infoType)); //保存已選擇的“信息類別”

session.put("payforType",payforType); //保存已選擇的“付費(fèi)狀態(tài)”

session.put("stateType",stateType); //保存已選擇的“審核狀態(tài)”

然后通過判斷是否選中“付費(fèi)狀態(tài)”與“審核狀態(tài)”中的“全部”單選按鈕來生成相應(yīng)的SQL語(yǔ)句。實(shí)現(xiàn)代碼如下:

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

String sqlall=""; //用來保存查詢所有記錄的SQL語(yǔ)句

String sqlsub=""; //用來保存查詢指定頁(yè)中記錄的SQL語(yǔ)句

Object[] params=null;

String mark ="";

int perR=8; //設(shè)置每頁(yè)顯示的記錄數(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]; //聲明一個(gè)大小為3的對(duì)象數(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]; //聲明一個(gè)大小為1的對(duì)象數(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]; //聲明一個(gè)大小為2的對(duì)象數(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]; //聲明一個(gè)大小為2的對(duì)象數(shù)組

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

params[1]=payforType; //保存設(shè)置info_payfor字段的值

}

代碼貼士

沒有同時(shí)選中“付費(fèi)狀態(tài)”與“審核狀態(tài)”的“全部”單選按鈕。

同時(shí)選中了“付費(fèi)狀態(tài)”與“審核狀態(tài)”的“全部”單選按鈕。

選中了“付費(fèi)狀態(tài)”中的“全部”單選按鈕,“審核狀態(tài)”任意。

選中了“審核狀態(tài)”中的“全部”單選按鈕,“付費(fèi)狀態(tài)”任意。

以上代碼中加粗的SQL語(yǔ)句用來查詢符合條件的第一頁(yè)所包含的記錄,其中變量perR表示每頁(yè)顯示的記錄數(shù)。

接著獲取存儲(chǔ)分頁(yè)信息的CreatePage類對(duì)象。實(shí)現(xiàn)代碼如下:

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

String strCurrentP=request.getParameter("showpage"); //獲取當(dāng)前頁(yè)碼

String gowhich="admin_ListShow.action"; //設(shè)置分頁(yè)超鏈接請(qǐng)求的資源

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

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

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


上一章目錄下一章

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