3.創(chuàng)建顯示審核信息的JSP頁面
用來顯示審核信息的頁面為checkshow.jsp,該頁面通過一個(gè)表單顯示被審核信息的詳細(xì)內(nèi)容,并提供了“通過審核”與“刪除信息”兩個(gè)提交按鈕。單擊“通過審核”按鈕,表單觸發(fā)admin_Check動作,將由AdminAction類中的Check()方法來處理該請求;單擊“刪除信息”按鈕,表單觸發(fā)admin_Delete動作,將由AdminAction類中的Delete()方法處理請求。checkshow.jsp的代碼如下:
例程66 代碼位置:光盤\TM\01\pages\admin\info\checkshow.jsp
<s2:form theme="simple">
<input type="hidden" name="checkID" value="<s2:property value="infoSingle.id"/>">
<input type="hidden" name="deleteID" value="<s2:property value="infoSingle.id"/>">
<table>
<tr>
<td><b>審核信息 [ID值:<s2:property value="infoSingle.id"/>]</b></td>
<td colspan="2" align="right"><s2:fielderror/></td>
</tr>
……//省略了顯示其他字段信息的代碼
<tr>
<td>信息內(nèi)容:</td>
<td>
<s2:if test="infoSingle.infoState==1"><s2:set name="forbid" value="true"/></s2:if>
<s2:else><s2:set name="forbid" value="false"/></s2:else>
<s2:submit action="admin_Check" value="√通過審核" disabled="%{forbid}"/>
</td>
<td><s2:submit action="admin_Delete" value="×刪除信息" onclick="return really()"/></td>
</tr>
……//省略了顯示其他字段信息的代碼
</table>
</s2:form>
代碼貼士
該form標(biāo)簽并沒有設(shè)置action屬性來指定表單觸發(fā)的Action動作,則默認(rèn)觸發(fā)當(dāng)前請求中的Action動作。
通過該submit標(biāo)簽的action屬性設(shè)置表單觸發(fā)的Action動作為admin_Check。
通過該submit標(biāo)簽的action屬性設(shè)置表單觸發(fā)的Action動作為admin_Delete。
4.在AdminAction類中創(chuàng)建信息審核的Check()方法
Check()方法將實(shí)現(xiàn)信息審核的操作。在該方法中,先獲取請求中傳遞的信息ID值,然后生成SQL語句,最后調(diào)用業(yè)務(wù)處理對象的OpUpdate ()方法實(shí)現(xiàn)信息審核操作。其實(shí)現(xiàn)代碼如下:
例程67 代碼位置:光盤\TM\01\src\com\yxq\action\AdminAction.java
/* 功能:管理員操作-審核信息(更新數(shù)據(jù)庫) */
public String Check(){
session.put("adminOP","Check"); //記錄當(dāng)前操作為“審核信息”
String checkID=request.getParameter("checkID"); //獲取信息ID值
String sql="UPDATE tb_info SET info_state = 1 WHERE (id = ?)";
Object[] params={checkID};
OpDB myOp=new OpDB();
int i=myOp.OpUpdate(sql, params); //更新數(shù)據(jù)表,實(shí)現(xiàn)信息審核操作
if(i>0) //審核信息成功
return "checkSuccess";
else{ //審核信息失敗
comebackState();
addFieldError("AdminCheckUnSuccess",getText("city.admin.check.no.success"));
request.setAttribute("mainPage","/pages/error.jsp");
return "UnSuccess";
}
}
5.配置cityinfo.xml文件
對信息審核操作的配置與對信息顯示的操作的配置使用的是同一個(gè)配置,可查看1.11.3節(jié)中配置cityinfo.xml文件中的代碼,只不過在該<action>元素中需要增加對<result>元素的配置,來指定信息審核操作成功和失敗后返回的視圖。配置代碼如下:
例程68 代碼位置:光盤\TM\01\WEB-INF\classes\cityinfo.xml
<result name="checkSuccess" type="redirectAction">
<param name="actionName">admin_*</param>
<param name="method">ListShow</param>
</result>
<result name="deleteSuccess" type="redirectAction">
admin_ListShow.action
</result>
<result name="UnSuccess">/pages/admin/view/AdminTemp.jsp</result>
代碼貼士
該<result>元素用來指定信息審核成功后返回的視圖,其中type屬性指定返回視圖的類型,redirectAction表示返回的視圖類型為Action動作;該<result>元素中的第一個(gè)<param>元素用來指定返回的Action動作,第二個(gè)<param>元素用來指定要執(zhí)行的方法。若程序返回由該<result>元素指定的視圖,則會生成如下請求:https://localhost:8080/CityInfo/ admin_*!ListShow.action。
該<result>元素用來指定信息刪除成功后返回的視圖,若程序返回由該<result>元素指定的視圖,則會生成如下請求:https://localhost:8080/CityInfo/admin_ListShow.action。
1.11.5 信息付費(fèi)設(shè)置的實(shí)現(xiàn)過程
信息付費(fèi)設(shè)置用到的數(shù)據(jù)表:tb_info。
根據(jù)信息付費(fèi)設(shè)置功能介紹,進(jìn)行信息付費(fèi)設(shè)置操作,需要先查詢出需要進(jìn)行付費(fèi)設(shè)置的信息,在頁面中顯示需要進(jìn)行付費(fèi)設(shè)置信息的詳細(xì)內(nèi)容,然后管理員通過單擊“設(shè)為付費(fèi)”按鈕,完成信息付費(fèi)設(shè)置操作。實(shí)際上,信息付費(fèi)設(shè)置的實(shí)現(xiàn)與信息審核的實(shí)現(xiàn)是相同的,只不過在查詢被操作的信息時(shí),信息審核操作的實(shí)現(xiàn),是將要查詢信息的ID值在超鏈接中傳遞,而信息付費(fèi)設(shè)置需要管理員向表單中輸入信息ID值,然后提交表單進(jìn)行傳遞。下面介紹信息付費(fèi)設(shè)置的實(shí)現(xiàn)過程。
1.在側(cè)欄對應(yīng)的right.jsp頁面中編寫實(shí)現(xiàn)付費(fèi)設(shè)置頁面的代碼
該編碼要實(shí)現(xiàn)一個(gè)表單,在表單中提供一個(gè)文本輸入框和一個(gè)提交按鈕,文本框用來接收管理員輸入的信息ID值。實(shí)現(xiàn)代碼如下:
例程69 代碼位置:光盤\TM\01\pages\admin\view\right.jsp
<!-- 設(shè)置已付費(fèi)信息 -->
<form action="admin_SetMoneyShow.action">
<tr><td>
<table>
<tr><td>請輸入要設(shè)為已付費(fèi)狀態(tài)的信息ID:</td></tr>
<tr><td >
<input type="text" name="moneyID" value="${param['moneyID']}" size="24"/>
<input type="submit" value="查詢"/>
</td></tr>
</table>
</td></tr>
</form>
代碼中${param['moneyID']}為JSP的EL表達(dá)式,表示獲取請求中名為moneyID的參數(shù)的值,也可以寫成${param.moneyID}的形式。
根據(jù)在cityinfo.xml文件中對admin_*.action的配置,上述代碼實(shí)現(xiàn)的表單被提交后,將由AdminAction類中的SetMoneyShow()方法進(jìn)行處理。
2.在AdminAction類中創(chuàng)建SetMoneyShow()方法
該方法用來顯示需要進(jìn)行付費(fèi)設(shè)置的信息的詳細(xì)內(nèi)容。在該方法中,首先需要獲取通過表單傳遞的信息ID值,然后生成查詢SQL語句,最后調(diào)用業(yè)務(wù)處理對象的OpSingleShow()方法返回封裝信息的InfoSingle類對象。在此之前,需要驗(yàn)證是否輸入了信息的ID值和ID值是否為數(shù)字格式,該驗(yàn)證可在validateSetMoneyShow ()方法中實(shí)現(xiàn),具體代碼可查看本書附帶光盤。SetMoneyShow()方法的關(guān)鍵代碼如下:
例程70 代碼位置:光盤\TM\01\src\com\yxq\action\AdminAction.java
String moneyID=request.getParameter("moneyID"); //獲取信息ID值
String sql="SELECT * FROM tb_info WHERE (id = ?)"; //生成SQL語句
Object[] params={moneyID};
OpDB myOp=new OpDB(); //創(chuàng)建業(yè)務(wù)對象
infoSingle=myOp.OpSingleShow(sql, params); //返回InfoSingle類對象
3.創(chuàng)建顯示付費(fèi)信息的JSP頁面
該頁面的編碼與顯示審核信息的JSP頁面的編碼相同,其關(guān)鍵代碼如下:
例程71 代碼位置:光盤\TM\01\pages\admin\info\moneyshow.jsp
<s2:form theme="simple">
<input type="hidden" name="moneyID " value="<s2:property value="infoSingle.id"/>">
<input type="hidden" name="deleteID" value="<s2:property value="infoSingle.id"/>">
<table>
<tr>
<td><b>付費(fèi)設(shè)置[ID值:<s2:property value="infoSingle.id"/>]</b></td>
<td colspan="2"><s2:fielderror/></td>
</tr>
……//省略了顯示其他字段信息的代碼
<tr>
<td>信息內(nèi)容:</td>
<td>
<s2:if test="infoSingle.infoState==1"><s2:set name="forbid" value="true"/></s2:if>
<s2:else><s2:set name="forbid" value="false"/></s2:else>
<s2:submit action="admin_SetMoney " value="√設(shè)為付費(fèi)" disabled="%{forbid}"/>
</td>
<td><s2:submit action="admin_Delete" value="×刪除信息" onclick="return really()"/></td>
</tr>
……//省略了顯示其他字段信息的代碼
</table>
</s2:form>
4.在AdminAction類中創(chuàng)建付費(fèi)設(shè)置的SetMoney ()方法
SetMoney()方法將實(shí)現(xiàn)付費(fèi)設(shè)置的操作。在該方法中,首先獲取表單中傳遞的信息ID值,然后生成SQL語句,最后調(diào)用業(yè)務(wù)處理對象的OpUpdate ()方法實(shí)現(xiàn)付費(fèi)設(shè)置的操作。關(guān)鍵代碼如下:
例程72 代碼位置:光盤\TM\01\src\com\yxq\action\AdminAction.java
String moneyID=request.getParameter("moneyID"); //獲取信息ID值
String sql="UPDATE tb_info SET info_payfor=1 WHERE (id = ?)"; //生成SQL語句
Object[] params={Integer.valueOf(moneyID)};
OpDB myOp=new OpDB(); //創(chuàng)建業(yè)務(wù)對象
int i=myOp.OpUpdate(sql, params); //執(zhí)行付費(fèi)設(shè)置操作