正文

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

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


接下來(lái)判斷用戶訪問的頁(yè)碼是否為第一頁(yè),若不是,則生成查詢其他頁(yè)記錄的SQL語(yǔ)句。實(shí)現(xiàn)代碼如下:

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

int currentP=createPage.getCurrentP(); //獲取當(dāng)前頁(yè)碼

if(currentP>1){ //如果不是第一頁(yè)

int top=(currentP-1)*perR;

if(mark.equals("1")){

sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_payfor = ?) AND (info _state = ?) AND (info_date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) AND (info_payfor = i.info_payfor) AND (info_state = i.info_state) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";

}

else if(mark.equals("2")){

sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";

}

else if(mark.equals("3")){

sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_state = ?) AND (info _date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) AND (info_state = i.info_state) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";

}

else if(mark.equals("4")){

sqlsub="SELECT TOP "+perR+" * FROM tb_info i WHERE (info_type = ?) AND (info_payfor = ?) AND (info _date < (SELECT MIN(info_date) FROM (SELECT TOP "+top+" (info_date) FROM tb_info WHERE (info_type = i.info_type) AND (info_payfor = i.info_payfor) ORDER BY info_date DESC) AS mindate)) ORDER BY info_date DESC";

}

}

最后查詢數(shù)據(jù)庫(kù),獲取符合條件并在當(dāng)前頁(yè)中顯示的信息。實(shí)現(xiàn)代碼如下:

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

List adminlistshow=myOp.OpListShow(sqlsub, params);

request.setAttribute("adminlistshow",adminlistshow);

request.setAttribute("createpage",createPage);

4.配置cityinfo.xml文件

本系統(tǒng)中所有訪問后臺(tái)操作的請(qǐng)求,都將其訪問路徑設(shè)置為admin_xxx.action,然后在cityinfo.xml配置文件中,將該路徑模式與AdminAction后臺(tái)處理類進(jìn)行指定,這樣所有訪問admin_*.action的請(qǐng)求都會(huì)由AdminAction類進(jìn)行處理。其配置代碼如下:

例程61 代碼位置:光盤\TM\01\WEB-INF\classes\cityinfo.xml

<!-- 后臺(tái)管理員操作 -->

<action name="admin_*" class="com.yxq.action.AdminAction" method="{1}">

<result name="input">/pages/admin/view/AdminTemp.jsp</result> <!-- 指定表單驗(yàn)證失敗后返回的資源-->

<result>/pages/admin/view/AdminTemp.jsp</result> <!-- 指定信息顯示請(qǐng)求處理成功后返回的資源 -->

</action>

5.創(chuàng)建顯示信息的JSP文件

在獲取了符合條件的信息后,應(yīng)返回JSP頁(yè)面進(jìn)行顯示。其關(guān)鍵代碼如下:

例程62 代碼位置:光盤\TM\01\pages\admin\info\listshow.jsp

<s2:set name="listshow" value="#request.adminlistshow"/>

……//省略了部分代碼

<s2:iterator status="status" value="listshow">

<s2:if test="#status.odd">

<tr></s2:if>

<s2:else>

<tr bgcolor="#F9F9F9"></s2:else>

<td><b><s2:property value="#status.index+1"/></b></td> <!-- 輸出序號(hào) -->

<td><s2:property value="id"/></td> <!-- 輸出信息ID值 -->

<td><a href="admin_CheckShow.action? checkID =<s2:property value='id'/>"><s2:property value="getSubInfoTitle(17)"/></a></td> <!-- 以超鏈接形式輸出信息標(biāo)題 -->

<td><s2:property value="infoDate"/></td> <!-- 輸出信息發(fā)布時(shí)間 -->

<td><s2:if test="infoPayfor==1">是</s2:if><s2:else>否</s2:else></td> <!-- 輸出付費(fèi)狀態(tài)-->

<td><s2:if test="infoState==1"><font color="red">是</font></s2:if><s2:else><b><font color="blue">否</font></b></s2:else></td> <!-- 輸出審核狀態(tài)-->

<td><a href="admin_CheckShow.action? checkID =<s2:property value='id'/>">√審核</a></td>

<td><a href="admin_Delete.action? deleteID=<s2:property value='id'/>" onclick="return really()">×刪除</a></td>

</tr>

</s2:iterator>

代碼貼士

set標(biāo)簽用來(lái)為變量賦值,并將該變量保存到指定范圍內(nèi)。其中,name屬性指定變量名,value屬性指定變量值,代碼中value的屬性值#request.adminlistshow等價(jià)于request.getAttribute("adminlistshow");可通過scope屬性指定變量的存儲(chǔ)范圍,可選值為application、session、request、page和action。

注意,該property標(biāo)簽并不是輸出字符串id,而是輸出當(dāng)前遍歷出的元素的getId()方法返回的值。

1.11.4 信息審核的實(shí)現(xiàn)過程

信息審核用到的數(shù)據(jù)表:tb_info。

根據(jù)信息審核功能的介紹,進(jìn)行信息審核操作,需要先進(jìn)入信息審核頁(yè)面,顯示被審核信息的詳細(xì)內(nèi)容,然后管理員通過單擊“通過審核”按鈕,完成信息審核操作。下面按照這個(gè)流程來(lái)介紹信息審核的實(shí)現(xiàn)過程。

1.在信息列表顯示頁(yè)面中實(shí)現(xiàn)進(jìn)入審核頁(yè)面的超鏈接

在信息列表顯示頁(yè)面中提供了信息標(biāo)題和“審核”超鏈接,單擊超鏈接后即可進(jìn)入信息審核頁(yè)面。實(shí)現(xiàn)代碼如下:

例程63 代碼位置:光盤\TM\01\pages\admin\info\listshow.jsp

<td><a href="admin_CheckShow.action? checkID=<s2:property value='id'/>"><s2:property value="getSubInfoTitle(17)"/> </a></td>

……

<td><a href="admin_CheckShow.action? checkID =<s2:property value='id'/>">√審核</a></td>

根據(jù)在cityinfo.xml文件中對(duì)admin_*.action的配置,上述代碼實(shí)現(xiàn)的超鏈接被觸發(fā)后,將由AdminAction類中的CheckShow()方法進(jìn)行處理。

2.在AdminAction類中創(chuàng)建CheckShow()方法

該方法用來(lái)顯示被審核信息的詳細(xì)內(nèi)容。在該方法中,首先需要獲取請(qǐng)求中傳遞的信息ID值,然后生成查詢SQL語(yǔ)句,最后調(diào)用業(yè)務(wù)處理對(duì)象的OpSingleShow()方法返回封裝信息的InfoSingle類對(duì)象。實(shí)現(xiàn)代碼如下:

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

/** 功能:管理員操作-顯示要審核的信息 */

public String CheckShow(){

request.setAttribute("mainPage","../info/checkshow.jsp");

comebackState(); //恢復(fù)在“顯示方式”中選擇的狀態(tài)的方法

String sql="SELECT * FROM tb_info WHERE (id = ?)";

String checkID=request.getParameter("checkID"); //獲取請(qǐng)求中傳遞的信息ID值

if(checkID==null||checkID.equals(""))

checkID="-1";

Object[] params={checkID};

OpDB myOp=new OpDB();

infoSingle=myOp.OpSingleShow(sql, params); //返回InfoSingle類對(duì)象

if(infoSingle==null){ //信息不存在

request.setAttribute("mainPage","/pages/error.jsp");

addFieldError("AdminShowNoExist",getText("city.singleshow.no.exist")); //保存提示信息

}

return SUCCESS;

}

代碼中調(diào)用的comebackState()方法用來(lái)恢復(fù)在“顯示方式”中選擇的狀態(tài)。實(shí)現(xiàn)代碼如下:

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

/* 功能:恢復(fù)在“顯示方式”中選擇的狀態(tài) */

private void comebackState(){

/* 獲取session中保存的選擇狀態(tài)。

* 將選擇狀態(tài)保存在session中,

* 是在管理員單擊“顯示”按鈕請(qǐng)求列表顯示時(shí),

* 在ListShow()方法中實(shí)現(xiàn)的

*/

Integer getInfoType=(Integer)session.get("infoType");

String getPayForType=(String)session.get("payforType");

String getStateType=(String)session.get("stateType");

/* 恢復(fù)選擇的狀態(tài) */

if(getPayForType!=null&&getStateType!=null&&getInfoType!=null){

showType.setInfoType(getInfoType.intValue());

showType.setPayforType(getPayForType);

showType.setStateType(getStateType);

}

}


上一章目錄下一章

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