正文

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

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


(3)創(chuàng)建要在框架頁面的內(nèi)容顯示區(qū)中顯示的listhshow.jsp頁面,在該頁面中編碼實現(xiàn)顯示某類別中的所有信息。下面為列表顯示免費信息的代碼,顯示付費信息的代碼與此相同,這里不再給出。

例程36 代碼位置:光盤\TM\01\view\default.jsp

<!-- 列表顯示免費信息 -->

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

<table>

<s2:if test="#onefreelist==null||#onefreelist.size()==0">

<tr><td align="center">★★★ 在這里顯示免費發(fā)布的信息!★★★</td></tr></s2:if>

<s2:else>

<tr><td><font color="#004790"><b>

■最新<s2:property value="#session.typeMap[#onefreelist[0].infoType]"/></b>『免費專區(qū)』

</font></td></tr>

<s2:iterator status="onefreeStatus" value="onefreelist">

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

<tr><td align="center" style="border:1 solid" bgcolor="#F0F0F0"></s2:if>

<s2:else>

<tr><td align="center" style="border:1 solid" bgcolor="white"></s2:else>

<table>

<tr>

<td colspan="2">【<s2:property value="#session.typeMap[infoType]"/>】</td>

<td align="right">發(fā)布時間:『<s2:property value="infoDate"/>』 </td>

</tr>

<tr><td colspan="3"><s2:property value="infoContent"/></td></tr>

<tr>

<td>聯(lián)系電話:<s2:property value="infoPhone"/></td>

<td>聯(lián)系人:<s2:property value="infoLinkman"/></td>

<td>E-mail:<s2:property value="infoEmail"/></td>

</tr>

</table>

</td>

</tr>

<tr height="1"><td></td></tr>

</s2:iterator>

<tr><td align="center"><jsp:include page="/pages/page.jsp"/></td></tr> <!-- 包含分頁導(dǎo)航欄頁面 -->

</s2:else>

</table>

在例程36中,<jsp:include page="/pages/page.jsp"/>用來包含實現(xiàn)分頁導(dǎo)航欄的頁面。分頁導(dǎo)航欄頁面的代碼如下:

例程37 代碼位置:光盤\TM\01\pages\page.jsp

<%@ taglib uri="/struts-tags" prefix="s2"%>

<table>

<tr>

<td><s2:property escape="false" value="#request.createpage.PageInfo"/></td>

<td><s2:property escape="false" value="#request.createpage.PageLink"/></td>

</tr>

</table>

代碼中設(shè)置了property標簽的escape屬性,它表示是否忽略HTML語言,false表示不忽略,則當輸出value屬性指定的值時,若其中包含“<”或“>”或其他HTML標識,則它們將在被解析為有效的HTML語法后輸出;否則,設(shè)為true,則表示忽略HTML語言,將原封不動地輸出value屬性指定值。

1.7.4 顯示信息詳細內(nèi)容的實現(xiàn)過程

顯示信息詳細內(nèi)容用到的數(shù)據(jù)表:tb_info。

當用戶在前臺單擊以超鏈接形式顯示的某信息標題時,也就觸發(fā)了查看信息詳細內(nèi)容的請求,該請求的處理是在InfoAction類中的SingleShow()方法中實現(xiàn)的,在請求處理結(jié)束后,即返回JSP頁面進行顯示。

1.創(chuàng)建處理請求的SingleShow()方法

在SingleShow()方法中,首先從請求中獲取想要查看詳細內(nèi)容的信息的ID值,并定義查詢SQL語句,然后將這兩個值作為參數(shù)來調(diào)用業(yè)務(wù)處理對象myOp的OpSingleShow()方法,在該方法中將查詢到的記錄封裝到InfoSingle類對象中,然后再返回該InfoSingle類對象,其具體代碼可查看1.5.2節(jié)介紹的OpSingleShow()方法。SingleShow()方法的代碼如下:

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

public String SingleShow(){

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

String id=request.getParameter("id"); //獲取請求中傳遞信息的ID

String sql="SELECT * FROM tb_info WHERE (id = ?)"; //生成查詢SQL語句

Object[] params={id};

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

infoSingle=myOp.OpSingleShow(sql, params); //獲取要查看的信息

if(infoSingle==null){ //若為null,表示要查看的信息不存在

request.setAttribute("mainPage","/pages/error.jsp"); //設(shè)置要顯示的JSP頁面

addFieldError("SingleShowNoExist",getText("city.singleshow.no.exist")); //設(shè)置提示信息

}

return SUCCESS;

}

代碼中將OpSingleShow()方法返回的InfoSingle類對象賦值給了infoSingle,infoSingle是在InfoAction類的父類InfoSuperAction中定義的屬性。InfoSuperAction類的代碼如下:

例程39 代碼位置:光盤\TM\01\src\com\yxq\actionSuper\InfoSuperAction.java

package com.yxq.actionSuper;

import com.yxq.model.InfoSingle;

import com.yxq.model.SearchInfo;

public class InfoSuperAction extends MySuperAction {

protected InfoSingle infoSingle; //用來封裝從數(shù)據(jù)表中查詢出的記錄和發(fā)布信息時的表單數(shù)據(jù)

protected SearchInfo searchInfo; //用來封裝搜索時的表單數(shù)據(jù)

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

}

2.配置cityinfo.xml文件

對查看信息詳細內(nèi)容請求的配置,與列表顯示某類別中所有信息請求的配置是同一個配置,可參看例程34。

3.創(chuàng)建顯示詳細信息的singleshow.jsp頁面

singleshow.jsp頁面內(nèi)容將顯示在框架頁面中的內(nèi)容顯示區(qū)中,在該頁面中編碼實現(xiàn)要查看信息的詳細內(nèi)容。代碼如下:

例程40 代碼位置:光盤\TM\01\pages\show\singleshow.jsp

<table>

<s2:if test="infoSingle==null">

<tr ><td colspan="2">★★★ 查看信息詳細內(nèi)容出錯!★★★</td></tr></s2:if>

<s2:else>

<tr>

<td>信息類別:</td>

<td><s2:property value="#session.typeMap[infoSingle.infoType]"/></td>

</tr>

<tr>

<td>發(fā)布時間:</td>

<td><s2:property value="infoSingle.infoDate"/></td>

</tr>

……//省略了顯示其他信息的代碼

</s2:else>

</table>

細心的讀者可能會發(fā)現(xiàn)<s2:if test="infoSingle==null">中test屬性所指定的表達式中沒有使用“#”符號,這是因為請求從InfoAction類處理結(jié)束,轉(zhuǎn)發(fā)到singleshow.jsp頁面后,當前堆棧頂部存儲的是InfoAction類對象的引用。因此,此時在singleshow.jsp頁面中使用Struts 2.0標簽時,都是以InfoAction類對象為基準,所以<s2:if test="infoSingle==null">中test屬性指定的表達式,就相當于判斷InfoAction類對象的getInfoSingle()方法返回的值是否為null。同理,在后面的property標簽中,例如<s2:property value="infoSingle.infoDate"/>輸出的值,這就相當于先調(diào)用InfoAction類對象的getInfoSingle()方法返回InfoSingle類對象,再調(diào)用InfoSingle對象的getInfoDate()方法,所以<s2:property value="infoSingle.info- Date"/>等價于<s2:property value="getInfoSingle().getInfoDate()"/>。

能夠這樣使用的前提是在InfoAction類中或其父類中提供infoSingle屬性及屬性的getInfoSingle()與setInfoSingle()方法,可查看例程39。最終的運行效果如圖1.34所示。


上一章目錄下一章

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