Bean標(biāo)簽庫的Struts-EL標(biāo)簽_第1頁
Bean標(biāo)簽庫的Struts-EL標(biāo)簽_第2頁
Bean標(biāo)簽庫的Struts-EL標(biāo)簽_第3頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C.3 Bean標(biāo)簽庫的Struts-EL標(biāo)簽在Bean庫中只有下列標(biāo)簽具有 EL使能的版本:in elude、message、page、resource 、size 和 struts 。注意EL使能的標(biāo)簽是指那些允許使用EL表達式的標(biāo)簽。具體例子參見第10章C.3.1 cookie/header/parameter每一個都基于指定的cookie/header/parameter/variable的值暴露一一個腳本變量。1. 使用限制id屬性和 n ame 屬性是必需的。2. 屬性name :需要取得的 cookie/header/parameter的名稱。id :要暴露的變量的名稱。scri

2、ptlet及其他定制標(biāo)簽將能夠使用這個名稱來訪問cookie/header/parameter的屬性。value :萬一給定名稱的cookie/header/parameter不能被找到而需要返回的默認值。multiple:指定具有相同名稱的多個cookie/header/parameter如何被處理。這個屬性的實際值并不重要。如果multiple屬性被設(shè)置,那么通過id暴露的變量便是一個對應(yīng)類型的數(shù)組(Cookie /String /String )。如果 multiple 屬性不存在,那么第一個發(fā)生的cookie/header/parameter就會被綁定到暴露的變量。3. 示例考慮下面的

3、URL /mypage.jsp?comma nd=test&actio n=save&id=12345下面就是如何在請求URL上面暴露名為command的參數(shù):<bean:parameter nametacommand11and' value-""/>Ccxnuwnd is: <X=cfnd%>如果有不只一個名為comma nd的參數(shù),例如:http:/HiftW./fflyp3ge-jsp?cornd=pTint&coTman(l-save可以這樣訪問它們:廣州工程仿真科技有限公司

4、工程仿真網(wǎng)<bean:parameter name-comnand" id=rcmd" value-"" multiple=,true,7> <logic:iterate nanje=H,cind'* id=l'aConmand',><beamwiite came-,faCoflTnjridF'/></logicsiterate>其他的header和cookie標(biāo)簽具有類似的例子。4. 對應(yīng)物JSTLc:set是這個標(biāo)簽的替代F面是如何在沒有指定multiple屬性的情況下將

5、c:set作為此標(biāo)簽的對應(yīng)物。變量名為myVar *,對應(yīng)的cookie/header/parameter的名 稱都是myAttr。<c:set var-riyVaii' value-'$cookie»ayAttr"/> <c:sct var="myVaT2" value="$(header<nyAttrb7> <c:set vr="rriyVar3" value-(param.myAttr"/>如果multiple屬性被指定,那么可以使用下列方式之一:&l

6、t;c:set var- "nyVaT4" value - "ipageContext request cookies *>qrAttiV> <C:5et var-nyVarS- value-"tfticaderValucs.myAttr) ><c:set var«'*iiyVar6w value-H t param Values. myAttr "7>注意,這里還使用了一個c:remove標(biāo)簽來刪除一個聲明了的變 量。C.3.2 defi ne這個標(biāo)簽基于來自一個給定的字符串,或另一個Ja

7、vaBean的數(shù)據(jù)暴露一個變量。scriptlet及其他標(biāo)簽可以像訪問任何其他的變量一樣訪問這個暴露變量。這可能好像沒有什么用處,但是它的確有用。 參見具體的例子。也請參考 cookie/header /parameter簽。和page條目,其中有相關(guān)的標(biāo)1. 使用限制id屬性是必需的,并作為要暴露的變量的名稱。也需要指定 name/property/scope 或value ,或者將暴露的變量的值嵌入到<bea n: defi ne>標(biāo)簽的標(biāo)簽體內(nèi)部。還有,只可以一次定義一個變量。試圖在同一個頁面中定義一個同名的新變量將導(dǎo)致拋出異常。2. 屬性id :要暴露的變量的名稱。scri

8、ptlet及其他定制標(biāo)簽將能夠使用這個名稱來訪問該新變量。name/property /scope:這些屬性使用一個給定的name禾口可選的 property禾口scope屬性來定位一個被暴露的對象。如果沒有指定scope,將在所有作用域中查找給定名稱的對象。value :要暴露的字符串值。這樣將通過id屬性暴露的變量綁定到value 屬性指定的字符串。toScope:在其上保存新變量的作用域??梢允莗age、request 、session 或applicati on 。type :使用id屬性暴露的變量的全限定類名。如果未被指定,在指定value 屬性的時候?qū)⑼瑫r使用java.la ng.

9、Str ing。要使用嵌套技術(shù)也會有提示(見示例),如果使用n ame/property/scope的方式,隱含的類名是 java.la ng.Object。3. 示例下面是可以使用<bean:define>來暴露一個字符串或變量的例子:(bean:define id="myVrl,r nJrDe='(nyAttrlppiDperty="rriyProp'r scopes''sessionM/><bean:define Id-''myVari" name-myAttr" scopes

10、"session"/><bean;define id="iny也value= "Hello World" toScope=rrequest"/>< bean: de fine id="rriyV5r4u>Here'$ looking at ycu kid !</bean :de-fine)<bean:define id-*myVar5"><I- myAttr.getMyPr叩()must never return null<bean:Hrite n

11、MAFyMtr” pr0perty»MmyPropl7>/bean:de-Finc>在最后一個例子中,如果myAttr.getMyProp() 返回null ,那么將拋出一個異常。否則,myVar5等于myAttr.getMyProp()在其被調(diào)用時的值。如果與Struts EL標(biāo)簽一起使用,可以使用<bean:define>來幫助本地化驗證(見第12章),回想一下,在第12章的對本地化驗證的處 理,我們解釋說可以使用嵌入本地化格式字符串到表單數(shù)據(jù)中的技巧 來解決(參看代碼清單12-3 )。Action將被用于填充隱藏字段。填充 該隱藏字段的更優(yōu)雅的方式是使用

12、<bean:define> 和<html-el:hidden> ,就像這樣:define IdFormat11 ><bean: message key=<Rmyapp * formats * dateFormat' / > </ben:define><htmi-el:hidden property-'MdateForwat)'/>myapp.formats.dateFormat指向的消息是日期格式,當(dāng)然,這是被Struts自動本地化的。不需要任何Action子類!4. 對應(yīng)物JSTL<c:se

13、t>可用于替換<bean:define>。前面的例子移植到<c:set>可能是:<c:set var="myVarl" value=H$sessionSi:叩叩"/><c:set var="rnyVar2" value=Ht&essionScope.myAttr"/><c:set vai-"myVarj" value-"Hello World' scope-'requosf7><c:set var="

14、myVar4H>Herer5 looking at you kldl</c:set><c:set var = "rnyVar5M><1- myAttr»getMyProp() must never return null -<t«an: write name- 'iiyAttr' propertyProp "/>/c:set>最后一個例子是相似的:<c:&et vmrJ'dmt日Format巾<bean:(r»&S5age key=,mya

15、ppifoimaLs</c:set><htn)l-el:hidden property:HtdateFormatV>C.3.3 in clude這個有趣的標(biāo)簽允許調(diào)用一個外部的JSP或全局轉(zhuǎn)發(fā)或URL并且將結(jié)果響應(yīng)數(shù)據(jù)作為一個變量訪問。被調(diào)用頁面的響應(yīng)不會寫出到 響應(yīng)流。如果該暴露的變量是用<bean:write> 顯示的,接收到的輸出是 經(jīng)過HTM編碼的(“<”被替換為“ & It; ”,等等)。1. 使用限制必須指定id屬性和forward 、page或者href屬性之一。2. 屬性id :要暴露的變量的名稱。scriptlet及其他定制標(biāo)

16、簽將能夠使用這個名稱來訪問該新變量。結(jié)果變量是頁面作用域的。forward :要調(diào)用的全局轉(zhuǎn)發(fā)的名稱。page :要調(diào)用的當(dāng)前 Web應(yīng)用中的JSP頁面的名稱。這個名稱是相對于模塊的,并且需 要一個“ /”前綴。href :夕卜部 頁 面 的 的 絕 對 URL , 例 如 ndex.html。anchor :被調(diào)用頁面的 HTML錨的名稱。tran saction:如果被設(shè)置為true ,則會在響應(yīng)中包含事務(wù)令牌。參見<logic:redirect>條目中的說明。3. 示例這個例子讀取給定的外部頁面,然后顯示實際的內(nèi)容。接收到的 HTMI都是經(jīng)過編碼的:<bean:Incl

17、ude Id - "myP昭孑 href- "http: /localhost: BoBo/IIlldep/V>(beansprite name="myPage"'/>4. 對應(yīng)物最接近的對應(yīng)物是JSTL的<c:import>,它調(diào)用一個URL并且暴露接收的數(shù)據(jù)為一個String或者一個Reader。前面的例子可以輕易地轉(zhuǎn) 變?yōu)槭褂肑STL:<c:import var-"myPage,r:8O8O/lilldep/"/>代:out value-h"$nyPage)>注意,還可

18、以使用嵌套<c:param>標(biāo)簽在接收數(shù)據(jù)上執(zhí)行參數(shù)替代。C.3.4 message這個標(biāo)簽顯示一個國際化了的消息。最多可以指定5個替代參數(shù)。1. 使用限制必須指定key屬性或者name/property/scope 組合。2. 屬性key :要顯示的消息資源的關(guān)鍵字。如果locale/bundle組合沒有被指定,那么默認消息資源文件和用戶的當(dāng)前場所將被用來決定顯示哪個消息資源。name/property/scope:這些屬性被用來基于一個具有給定的name和可選的property 和scope 屬性的對象來導(dǎo)岀一個關(guān)鍵字。如果沒有指定scope,將在所有作用域中查找給定名稱的對象

19、。locale/bundle:這些屬性用于指定一個不同的場所對象或消息資源文件。locale 指定一個可用于查找存儲于當(dāng)前會話中的Locale 對象的關(guān)鍵字。bun dle 屬性將在下面的小節(jié)中詳細解釋。arg0/arg1/arg2/arg3/arg4:這些分別是第一個、第二個、第三個、第四個以及第五個替代參數(shù)的值。3. 使用多重消息資源文件Struts允許聲明多個消息資源文件(也就是說,對同一個場所有 多個Applicatio“.properties文件。每一個這樣的消息資源文件被命名為一個唯一的名稱,并在Struts標(biāo)簽中使用bundle屬性來引用)。默 認消息資源文件沒有名稱,并且它是唯

20、一的,也就是說如果bundle屬性沒有被指定,就將使用它。你應(yīng)該知道使用多重的消息資源文件有一些問題:有報告說與Validator框架一起使用會有問題。它讓維護更加困難。這是因為除指定關(guān)鍵字之外,必須指示bun dle 名稱(如果它不是默認的那個的話)。如果后來決定將一個消息從一個文件移動到另一個文件中(如果想要 調(diào)整一個應(yīng)用程序以確保顯示的消息或提示的一致性,這就會很常見),那么必須修改每個使用那些特殊消息的標(biāo)簽的bun dle 屬性值。所以應(yīng)該盡可能地避免使用這個特征。一種可選的方法是對關(guān)鍵字使用一種命名約定,比如點號命名約 定(例如,app.error. prompt.login)。筆者

21、在本書中就對消息關(guān)鍵字使用了這種約定。這能夠創(chuàng)建分離的名字空間,因此排除了使用多個 消息資源文件的必要?,F(xiàn)在應(yīng)該知道使用多個消息資源文件的危險了。下面是可以如何在struts-config.xml文件中聲明多個消息資源文件:<! - the default m欝呦g亡 resource file;<n»ess age-resourcesparameter=HhApplication"/>c! - another inessage resouice file - >< me ss age - re soutc esp arame t er=irA

22、pplication2Rkey = "niyCt herResourceFile "/>在這個例子中,第二個消息資源文件是Applicatio perties,并且被保存在與默認的Applicatio “.properties文件的同一地點(也就是說,在 /WEB-INF/classes/ 中)。為了從該默認文件中顯示一個提示,可使用<bcan:key -"日pp enor. prompt 1 oginir/>為了從第二文件中顯示一個提示,可使用廣州工程仿真科技有限公司工程仿真網(wǎng)<bean;message bundle-&quo

23、t;ntyOtherResourceFile,'key=*1 a pp. prompt checkdata />額外的bundle屬性告訴Struts使用哪個消息資源文件。4. 示例下面是如何顯示一個消息的例子:<bean:message key - "app. prompt .login '7>這里是如何使用其tostring()方法返回關(guān)鍵字的JavaBean的例子:ItbeanifDessage r»an»e='myLoginHe5sageKey'7>這里是如何使用其屬性給出關(guān)鍵字的JavaBean的例

24、子:<bean:i*essage name='Mye3n'' property"formatKey這個例子調(diào)用MyBea n. getFormatKey()并且將其用做消息關(guān)鍵字。如果必要將在返回值上調(diào)用toString() 方法。如果該消息具有替代參數(shù), 例如:iapp. prompt h logo幵=Logo桿(o)可以使用下面的代碼來執(zhí)行替代(使用EL):beantnessage'el key"a mpt * logoff argo="$7>5. 對應(yīng)物在JSTL和JSF中都有對應(yīng)物。

25、對于JSTL,可以使用格式化庫:bundle basenafne=FApplication'><+mt:mes-sage key="mpt,logo+F">param value="$"/>ties sage ></fmt: t>undle>這段代碼片段是最后一個例子使用對應(yīng)物的情況,使用了一個替代參數(shù)。如果使用JSF,可以很方便地使用Struts-Faces 庫(參見第20章)來暴露默認消息資源文件:<s:loadNesiages var="rrcs

26、5agcs'V><1: output For mat value- (messages F app, prompt»logaf-fF "><f;paiam value>Bttuser«nane)"/></h:ojtputformat>這和前面的JSTL例子是等價的。最后,還有一個來自Struts-Faces 集成庫的 <s:message>標(biāo)簽。C.3.5 page這個方便的標(biāo)簽將來自于頁面上下文中的對象暴露為可以通過 scriptlet或定制標(biāo)簽訪問的變量。PageContext 對象

27、是當(dāng)前頁面的所有狀態(tài)的儲存庫。這包含在第 2 章描述過的會話(HttpSession ) 和請求(HttpServletRequest )中。還 有一些:applicati on: javax.servlet.ServletC on text對象, 通過調(diào)用pageC on text.getServlet- Con text()來獲得。config :javax.servlet.ServletC onfig對 象, 通 過 調(diào) 用pageContext.getServletConfig()來獲得。不要將其與 Struts的內(nèi)部配置對象搞混淆。respo nse:與此頁面關(guān)聯(lián)的HttpServl

28、etRespo nse對象。應(yīng)該參考最新的servlet參考文檔(或者在Google上搜索類名來 找到相關(guān)JavaDoc),以獲得有關(guān)它們的更多詳細信息。1. 使用限制id屬性和 property 屬性都是必需的。2. 屬性id :要暴露的變量的名稱。scriptlet及其他定制標(biāo)簽將能夠使用這個名稱來訪問該新變量。 這個屬性是必需的。property :該屬性的值是 application、ession、request 、config 或 response ,用于從頁面上下文獲得關(guān)聯(lián)的對象。這個屬性是必需的。3. 示例代碼片斷<bean:pageproperty-11 session

29、"/>將與外圍的頁面相關(guān)聯(lián)的會話對象(HttpSession)暴露為一個名為myVar的bean。另一個頁面上下文對象是以同樣的方式被暴露的。4. 對應(yīng)物JSTL的<c:set>可用于替換<bean:page>。我們來看一些例子。為暴露應(yīng)用程序,使用這個代碼:<c:set var="nyVr" value=*J(peCiyitext,servletCortext',/>為了暴露會話,使用這個:<c:set var'inyVar* value tpageContext*sesskn*/>為了暴露請

30、求,使用這個:<c:set var' myVar" val'$pag&Context * request*/>為了暴露配置對象,使用這個:<c:&et war: ' myVar* value="tpageContext,servletConiig11 />為了暴露響應(yīng),使用這個:<c:set var="myVar" value=M$pageContext * response'應(yīng)該注意到 JSTL 隱含的對象 sessi on Scope 和 pageCo ntext.sess

31、ion 是不相同的。前者是一個包含關(guān)鍵字/值對的MaP,后者是實際的HttpSession 對象,可以讀取它的屬性。C.3.6 resourceresource允許從當(dāng)前 Web應(yīng)用程序讀取任何文件并且將其暴露為個字符串變量或者一一個InputStream。參見 <bean:include>。1. 使用限制id屬性和 n ame 屬性是必需的。2. 屬性id :要暴露的變量的名稱。scriptlet及其他定制標(biāo)簽將能夠使用這個名稱來訪問該新變量。 這個屬性是必需的。name :要加載資源的模塊相對的名稱。in put:如果這個屬性被指定(實際的值并不重要),那么該暴露的變量具有In

32、 putStream類型,否則它是 String 類型。3. 示例說實在的,很難看到這個標(biāo)簽如何有用,除非使用其他可以讀取 和解析InputStream 的定制標(biāo)簽。下面是使用一假定的RSS源 (/myRss.xml ,其中包含RSS標(biāo)記)的一個例子,以及一個假定的用 來顯示RSS輸出的<rss>定制標(biāo)簽例子:<1- expose the RSS XML data:<bean:resource id=lFrs$Src" nane=,7myRss,Kinl" i叩irt=Nye57><-display the RSS data as HTM

33、L:-><rss:writc name="i5sSr匚"/>4. 對應(yīng)物最接近的對應(yīng)物是JSTL的<c:import> ,它調(diào)用一個URL并且暴露 接收到的數(shù)據(jù)為一個String或者一個Reader。前面的例子可以輕易地 轉(zhuǎn)變?yōu)槭褂肑STL:<c:import varReader-rssSrc' urI-"myRss,xhilT'/><rss:write value-,lirssSic*/>C.3.7 size這個標(biāo)簽將一個給定的Collection或者Map或者數(shù)組的大小暴露為一個變量(整數(shù)類

34、型),可以從scriptlet 或定制標(biāo)簽訪問到。1. 使用限制id屬性是必需的,并且必須指定想要測量大小的數(shù)組/Collecti on/Map,使用 collecti on屬性或者 一一個 n ame/property/scope組合口。2. 屬性id :要暴露的變量的名稱。scriptlet及其他定制標(biāo)簽將能夠使用這個名稱來訪問該新變量。 這個屬性是必需的。name/property/scope:這些屬性被用來定位Collection/Map/ 數(shù)組,基于可選的屬性和作用域。如果沒有指定scope,將在所有作用域中查找給定名稱的對象。collectio n:這個是 n ame/proper

35、ty/scope組合的一個非常方便的替換物。使用scriptlet來計算這個屬性的值,例如:size id-"mySize"collection=t,<%=MyCbject.calculateCollecti&n() b7>這個屬性后面的基本原理將在<logic:iterate> 條目中解釋。3. 示例下面是暴露一個給定集合的大小的簡單例子:<bean;slze id-T'nye, name-"MyCollection'7>(t)ean;write name-"Size"/>4.

36、 對應(yīng)物可以連同JSTL length函數(shù)使用JSTL的<c:set> :<c:set var=:"inyVar'' value=Ht'*:n:lertgth(MyCollection)7>記住聲明JSTL函數(shù)標(biāo)簽庫。C.3.8 struts這個標(biāo)簽暴露一個Struts全局轉(zhuǎn)發(fā),或表單bean或表單處理器(該表單處理器的Actio nMappi ng)為一個變量,可以通過SCriptlet及其他標(biāo)簽進行訪問。如果想要JSTL能夠訪問Struts的內(nèi)部變量,這是很有幫助的。1. 使用限制id屬性是必需的。還必須指定forward 、for

37、mBean或 mapp ing 屬性。2. 屬性id :要暴露的變量的名稱。scriptlet及其他定制標(biāo)簽將能夠使用這個名稱來訪問該新變量。 這個屬性是必需的。forward :要暴露的全局轉(zhuǎn)發(fā)的名稱。formBean :要暴露的已經(jīng)聲明的表單bean的名稱。mapp ing :要暴露的表單處理器的名稱。3. 示例考慮這段struts-config.xml代碼:<+orm-bean name=l RegistTationFoiinBedn-Htype="net.th i nksqjared, reg, l?egi trat i on FormBean (7></f

38、orm-beans><global-forwards><forward nmni亡="myForw日tcT path='7index.jsp*/>(/global -Forward 4 >(action-it appings><acticn path="/LoginH type="net.thinksquared,refi+Regi5tiationActiort'vail date-"tru«"nai»e=H Registrat i onFonnBean&quo

39、t;i nput'iny Input .jsp'><f or ward nafne-*success,' path-11 registered, jspV><forward name-"niew-u$er" path=Nnew-user.jsp 7></action></action'inappings>下面是暴露全局轉(zhuǎn)發(fā)的方式:<bcan;struts ld«"fwd' foiwaxd-"myForwaid'/><bean:

40、write iwflieJ'fwdS<bear:write naw已"fw<r property*"path'7>以及表單bean:cbean:£tfiit$ id-'fbejn" fontiean-"RegistrationortnBeanT/)(t)ean:write name- l,fbean'7><bean:write name* "fbean11 property-"type"/>以及表單處理器:cbeanystrufs id*Chandler71 napping="/Login"/><t>ean:WTite name -Chandler*/>(bean:write name=11 fhandler" property-11 input'7>4. 對應(yīng)物無。C.3.9 write這個標(biāo)簽將指定的bean屬性輸出為響應(yīng)流。它允許對給定的bean屬性進行一些格式化。1. 使用限制n ame 屬性是必需的。2. 屬性name/property/scope:這些屬性被用來基于給定的name和

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論