一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

JSTL與Struts的結(jié)合(十)

 WindySky 2006-12-29

JSTL與Struts的結(jié)合(十)

分類:我的著作

9.8.3  JSTL VS Struts Logic標(biāo)簽庫(kù)

Struts Logic標(biāo)簽庫(kù)中的標(biāo)簽在頁(yè)面顯示時(shí)是時(shí)常被用到的,但是常用的卻不一定是最好用的,有了JSTL標(biāo)簽庫(kù)和EL表達(dá)式后,許多Struts Logic標(biāo)簽庫(kù)的標(biāo)簽可以被簡(jiǎn)單替換。

1. 所有判斷標(biāo)簽被EL表達(dá)式和<c:if>標(biāo)簽替換

q         原形:判斷標(biāo)簽有一個(gè)特點(diǎn),就是需要取得一個(gè)實(shí)例的變量,因此通過(guò)<bean:define>標(biāo)簽來(lái)取得實(shí)例的變量是必須的,隨后就通過(guò)各種判斷標(biāo)簽來(lái)完成判斷的工作。常用的判斷標(biāo)簽如表9.30所示:

9.30  常用判斷標(biāo)簽

標(biāo)簽名

描述

empty

判斷變量是否為空

notEmpty

empty標(biāo)簽正好相反

equal

判斷變量是否與指定的相同

notEqual

equal標(biāo)簽正好相反

lessThan

判斷變量是否比指定的小

greaterThan

判斷變量是否比指定的大

lessEqual

判斷變量是否小于等于指定的值

greaterEqual

判斷變量是否大于等于指定的值

present

檢查headerrequest parametercookie、JavaBeanJavaBean propertie不存在或等于null的時(shí)候,判斷成功

notPresent

present標(biāo)簽正好相反

match

比較String類型字符串是否與指定的相同

notMatch

match標(biāo)簽正好相反

q         替換方案:利用EL表達(dá)式和<c:if>標(biāo)簽來(lái)替換。

q         示例比較:判斷標(biāo)簽的動(dòng)作:

<bean:define id="javaBeanName"

name="javaBeanParameter"

property="attack_event_code"

scope="request"/>

<logic:notEmpty name="javaBeanParameter">

         javaBeanParameter not empty

</logic:notEmpty>

EL表達(dá)式和<c:if>標(biāo)簽的動(dòng)作:

<c:if test="${requestScope.javaBeanParameter.attack_event_code != null

&& requestScope.javaBeanParameter.attack_event_code != ‘‘”}>

         javaBeanParameter not empty

</c:if>

EL表達(dá)式利用操作符來(lái)完成判斷動(dòng)作,然后通過(guò)<c:if>標(biāo)簽來(lái)根據(jù)判斷結(jié)果處理對(duì)應(yīng)工作。

q         比較結(jié)果:EL表達(dá)式的操作符對(duì)判斷的貢獻(xiàn)很大,EL表達(dá)式的靈活性是Struts判斷標(biāo)簽無(wú)法比擬的,任何判斷標(biāo)簽都可以通過(guò)表達(dá)式來(lái)實(shí)現(xiàn)。<c:if>標(biāo)簽還可以將判斷的結(jié)果保存為一個(gè)變量,隨時(shí)為之后的頁(yè)面處理服務(wù)。

反觀Struts框架的判斷標(biāo)簽,在工作之前必須先定義被判斷的變量,而判斷后又無(wú)法保存判斷結(jié)果,這樣的程序設(shè)計(jì)遠(yuǎn)不如EL表達(dá)式和<c:if>標(biāo)簽的協(xié)作來(lái)得強(qiáng)大。因此使用EL表達(dá)式和<c:if>標(biāo)簽來(lái)替換判斷標(biāo)簽是更好的選擇。

2. <logic:iterate>標(biāo)簽被<c:forEach>標(biāo)簽和EL表達(dá)式替換

q         原形:<logic:iterate>標(biāo)簽用來(lái)對(duì)集合對(duì)象的迭代,可以依次從該集合中取得所需要的對(duì)象。

q         替換方案:利用<c:forEach>標(biāo)簽和EL表達(dá)式的協(xié)作替換<logic:iterate>標(biāo)簽。

q         示例比較

<logic:iterate>標(biāo)簽的動(dòng)作:

<logic:iterate name="allAttackSolution"

     id="attackSolution"

     type="struts.sample.cap1.sample3.entity.AttackSolution">

         <bean:write property="attack_event_code" name="attackSolution"/>

         <bean:write property="attack_mean" name="attackSolution"/>

         <bean:write property="attack_action" name="attackSolution"/>

</logic:iterate>

<c:forEach>標(biāo)簽EL表達(dá)式協(xié)作的動(dòng)作:

<c:forEach items="${requestScope.allAttackSolution}" var="attackSolution">

         ${attackSolution.attack_event_code}

         ${attackSolution.attack_mean}

         ${attackSolution.attack_action}

</c:forEach>

兩個(gè)動(dòng)作都做的是同一件事,從request中得到保存的“allAttackSolution”參數(shù),該參數(shù)為一個(gè)集合,集合中的對(duì)象為struts.sample.cap1.sample3.entity.AttackSolution類型的實(shí)例。

<logic:iterate>標(biāo)簽本身可以接收集合,保存為一個(gè)變量,利用迭代子模式,使<logic:iterate>標(biāo)簽體中的<bean:write>標(biāo)簽將集合中的每個(gè)JavaBean顯示出來(lái)。

提示:在本例中由于要顯示JavaBean中的變量屬性,因此<bean:write>標(biāo)簽還需要設(shè)置property屬性。

替換工作的<c:forEach>標(biāo)簽則相對(duì)要方便些,items屬性使用EL表達(dá)式取得集合,然后設(shè)置var屬性作為集合中對(duì)象的變量,最后使用EL表達(dá)式來(lái)顯示數(shù)據(jù)。

q         比較結(jié)果:

值得注意的一個(gè)地方是,<logic:iterate>標(biāo)簽必須為集合中的對(duì)象指定類型,因?yàn)闃?biāo)簽庫(kù)處理時(shí)會(huì)將集合中的對(duì)象作為Object類型得到,然后需要讀取type屬性定義的Java類為它強(qiáng)制轉(zhuǎn)型。

<c:forEach>標(biāo)簽則完全不用,只要符合標(biāo)準(zhǔn)JavaBean(為變量屬性提供get、set方法)的對(duì)象都可以通過(guò)EL表達(dá)式來(lái)從var屬性定義的變量中取得該JavaBean的變量屬性。

因此<c:forEach>標(biāo)簽和EL表達(dá)式的方式更加簡(jiǎn)單,也更加靈活。

當(dāng)然,熟悉<logic:iterate>標(biāo)的程序設(shè)計(jì)者也可以將<bean:write>標(biāo)簽替換為EL表達(dá)式而仍然使用<logic:iterate>標(biāo)簽。代碼可以是這樣:

<logic:iterate name="allAttackSolution"

id="attackSolution"

type="struts.sample.cap1.sample3.entity.AttackSolution">

         ${attackSolution.attack_event_code}

         ${attackSolution.attack_mean}

         ${attackSolution.attack_action}

</logic:iterate>

結(jié)果一樣,但這種方式比<bean:write>標(biāo)簽顯示方式靈活多了。

3. <logic:redirect>標(biāo)簽被<c:redirect><c:param>標(biāo)簽替換

q         原形<logic:redirect>標(biāo)簽用來(lái)轉(zhuǎn)發(fā)到一個(gè)頁(yè)面,并可以為轉(zhuǎn)發(fā)傳遞參數(shù)。

q         替換方案:利用<c:redirect><c:param>標(biāo)簽的協(xié)作替換<logic:redirect>標(biāo)簽。

q         示例比較:<logic:iterate>標(biāo)簽的動(dòng)作:

<%

         HashMap paramMap = new HashMap();

         paramMap.put("userName", "RW");

         paramMap.put("passWord", "123456");

%>

 <logic:redirect page="/MyHtml.jsp" name="paramMap" scope="request" />

<c:redirect><c:param>標(biāo)簽協(xié)作的動(dòng)作:

<c:redirect url="/MyHtml.jsp">

         <c:param name="userName" value="RW"/>

         <c:param name="passWord" value="123456"/>

</c:redirect>

兩個(gè)動(dòng)作都做的是同一件事,都將轉(zhuǎn)發(fā)到當(dāng)前Web Context下的“MyHtml.jsp”去,而且都將為它提供兩個(gè)參數(shù)。最后的轉(zhuǎn)發(fā)鏈接看起來(lái)應(yīng)該如下所示:

http://localhost:8080/test/ MyHtml.jsp? userName=RW&password=123456

q         比較結(jié)果

一眼就可以看出,<logic:redirect>標(biāo)簽的可讀性不強(qiáng),它的name屬性表示的是一個(gè)Map類型的變量。如果還有property屬性,則name屬性指的是一個(gè)標(biāo)準(zhǔn)JavaBean。property屬性指的是JavaBean中的一個(gè)Map類型的變量屬性,通過(guò)Map的“名值對(duì)”來(lái)為轉(zhuǎn)發(fā)頁(yè)面?zhèn)鬟f參數(shù)。如果轉(zhuǎn)發(fā)參數(shù)是來(lái)自于一個(gè)MapJavaBean中的Map類型變量屬性,那還好,因?yàn)榭梢栽?/span>Java類中處理??墒侨绻兇馐菑捻?yè)面上取得某些值作為轉(zhuǎn)發(fā)參數(shù),那就困難了,必須像本示例所給出的那樣,自行定義一個(gè)Map實(shí)例。這種情況下,頁(yè)面就會(huì)看到Java語(yǔ)言的片段,既麻煩又不符合標(biāo)準(zhǔn)。

而使用<c:redirect><c:param>標(biāo)簽協(xié)作,由于包含在<c:redirect>標(biāo)簽體內(nèi)的<c:param>標(biāo)簽可以有多個(gè),因此顯式地提供<c:param>標(biāo)簽就完成了給出轉(zhuǎn)發(fā)參數(shù)的工作,即使用到JavaBean,也可以使用EL表達(dá)式來(lái)實(shí)現(xiàn)。

綜上所述,利用<c:redirect><c:param>標(biāo)簽來(lái)代替<logic:redirect>標(biāo)簽是有必要的。

9.8.4  總結(jié)

Struts框架JSTL并不是互相沖突的兩種技術(shù),雖然Struts框架提供了功能不錯(cuò)的標(biāo)簽庫(kù),但是使用JSTL可以簡(jiǎn)化Struts框架標(biāo)簽庫(kù)復(fù)雜的地方,這對(duì)于服務(wù)器端表示層框架的Struts來(lái)說(shuō)幫助很大。StrutsHTML標(biāo)簽庫(kù)無(wú)法使用JSTL來(lái)替換,但是,使用EL表達(dá)式作為一些value屬性,來(lái)做賦值的工作仍然不失為一種好的選擇。因此,在JSTL已經(jīng)比較成熟的今天,使用Struts框架和JSTL整合來(lái)作JSP頁(yè)面將使程序設(shè)計(jì)更為輕松。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    久久精品伊人一区二区| 国产亚洲精品岁国产微拍精品| 国产内射一级一片内射高清视频 | 国产成人av在线免播放观看av | 欧美视频在线观看一区| 欧洲一区二区三区自拍天堂| 亚洲香艳网久久五月婷婷| 激情爱爱一区二区三区| 99视频精品免费视频播放| 国产精品香蕉在线的人| 欧美一级日韩中文字幕| 成年男女午夜久久久精品| 久久精品欧美一区二区三不卡| 好吊日在线观看免费视频| 日韩亚洲精品国产第二页| 欧美日韩一级黄片免费观看| 99亚洲综合精品成人网色播| 欧美丝袜诱惑一区二区| 国产伦精品一区二区三区高清版| 亚洲高清一区二区高清| 亚洲中文字幕在线观看四区| 国产欧美一区二区三区精品视| 亚洲一区二区三区有码| 日韩精品免费一区二区三区| 老司机这里只有精品视频| 欧美一区二区三区不卡高清视| 爱在午夜降临前在线观看| 国产在线一区二区免费| 久久国产亚洲精品成人| 一二区不卡不卡在线观看| 国产精品一区二区三区激情| 婷婷色香五月综合激激情| 国产精品一区二区视频大全| 久久精品伊人一区二区| 高潮少妇高潮久久精品99| 日韩成人中文字幕在线一区 | 91人妻人人澡人人人人精品| 日韩国产传媒在线精品| 亚洲精品偷拍一区二区三区 | 国产中文字幕一二三区| 国产成人一区二区三区久久|