Struts標(biāo)簽庫_第1頁
Struts標(biāo)簽庫_第2頁
Struts標(biāo)簽庫_第3頁
Struts標(biāo)簽庫_第4頁
Struts標(biāo)簽庫_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Taglib (Struts2標(biāo)簽庫)Struts2 Taglib抽象了不同表示技術(shù),現(xiàn)在Struts2主要支持三種表示技術(shù):JSP,FreeMarker和Velocity。但部分的Tag在三種表示技術(shù)下都可以使用,但是也有部分只能在某一種情況下使用。Tab可以分為兩類:通用標(biāo)簽和UI標(biāo)簽。4.1節(jié) 通用標(biāo)簽通用標(biāo)簽用來在頁面表示的時(shí)候控制代碼執(zhí)行的過程,這些標(biāo)簽也允許從Action或者值堆棧中取得數(shù)據(jù)。例如地域,JavaBeans,URLs,和action??刂茦?biāo)簽控制程序執(zhí)行,例如:if,else,iterator數(shù)據(jù)標(biāo)簽管理數(shù)據(jù)的取得和創(chuàng)建,例如:bean,push,i18n控制標(biāo)簽if

2、標(biāo)簽 描述 If標(biāo)簽用來控制基本的條件處理流程,通常和else標(biāo)簽或者elseif標(biāo)簽連用。參數(shù)名字是否必須默認(rèn)值可否使用表達(dá)式類型描述id否 是String用來表示該元素,對于UI和Form標(biāo)簽來說直接轉(zhuǎn)變?yōu)镠TML id屬性test是 是Boolean用來決定是否顯示標(biāo)簽內(nèi)部內(nèi)容的表達(dá)式 例子<s:if test="%false"> <div>Will Not Be Executed</div></s:if><s:elseif test="%true"> <

3、;div>Will Be Executed</div></s:elseif><s:else> <div>Will Not Be Executed</div></s:else>elseIf 標(biāo)簽參考if標(biāo)簽else 標(biāo)簽參考if標(biāo)簽append標(biāo)簽 描述用來做iterator標(biāo)簽的輔助,將不同iterator中的內(nèi)容合在一個(gè)iterator中。參數(shù)名字是否必須默認(rèn)值可否使用表達(dá)式類型描述id否 是String用來保存結(jié)果iterator的對象在value context中的名字。 例子Action類

4、public class AppendIteratorTagAction extends ActionSupport   private List myList1; private List myList2; private List myList3;   public String execute() throws Exception   myList1 = new ArrayList(); myList1.add("1"); myList1.add("2"); myList1.add("3"

5、);  myList2 = new ArrayList(); myList2.add("a"); myList2.add("b"); myList2.add("c");  myList3 = new ArrayList(); myList3.add("A"); myList3.add("B"); myList3.add("C");  return "done"   public List getMyList1() r

6、eturn myList1; public List getMyList2() return myList2; public List getMyList3() return myList3;  標(biāo)簽使用<s:append id="myAppendIterator"> <s:param value="%myList1" /> <s:param value="%myList2" /> <s:param value="%myList3" /></s:app

7、end><s:iterator value="%#myAppendIterator"> <s:property /></s:iterator> generator 標(biāo)簽(JSP Tag)描述從val屬性生成一個(gè)iterator。參數(shù)例子例1:生成一個(gè)簡單的iterator,并且使用iterator標(biāo)簽打印出內(nèi)容。<s:generator val="%'aaa,bbb,ccc,ddd,eee'"> <s:iterator> <s:property />&

8、lt;br/> </s:iterator></s:generator> 例2:生成一個(gè)iterator,使用count屬性。因?yàn)閏ount屬性值為3,所以只有前三個(gè)內(nèi)容(aaa,bbb,ccc)在生成的iterator中。Generate an iterator with count attribute<s:generator val="%'aaa,bbb,ccc,ddd,eee'" count="3"> <s:iterator> <s:property />&l

9、t;br/> </s:iterator></s:generator> 例3:生成iterator,使用了id屬性,之后生成的對象放在pageContext中,可以通過指定的id來訪問。<s:generator val="%'aaa,bbb,ccc,ddd,eee'" count="4" separator="," id="myAtt" /><% Iterator i = (Iterator) pageContext.getAttribute(

10、"myAtt"); while(i.hasNext() String s = (String) i.next(); %> <%= s %> <br/><% %> 例4:生成iterator,使用converter屬性,這里的convertor僅僅將每一個(gè)對象添加了一個(gè)"converter-"前綴。<s:generator val="%'aaa,bbb,ccc,ddd,eee'" converter="%myConverter"> <

11、;s:iterator> <s:property /><br/> </s:iterator></s:generator>  public class GeneratorTagAction extends ActionSupport   .  public Converter getMyConverter() return new Converter() public Object convert(String value) throws Exception return "converter

12、-"+value; ;   .  iterator 標(biāo)簽描述迭代處理一個(gè)java.util.Connection或者java.util.Iterator對象 參數(shù)名字是否必須默認(rèn)值可否使用表達(dá)式類型描述id否 是StringId,status否否是Boolean如果指定,在循環(huán)的過程中會保留一個(gè)IteratorStatus類型的變量,該變量用來查詢當(dāng)前迭代的狀態(tài)value否 是String被迭代的對象  例子例1:<s:iterator value="days"> <

13、p>day is: <s:property/></p></s:iterator> 例2:<s:bean nts2.example.IteratorExample" id="it"> <s:param name="day" value="'foo'"/> <s:param name="day" value="'bar'"/></s:bean><p/&g

14、t;<table border="0" cellspacing="0" cellpadding="1"><tr> <th>Days of the week</th></tr><p/><s:iterator value="#it.days" status="rowstatus"> <tr> <s:if test="#rowstatus.odd = true"> <t

15、d style="background: grey"><s:property/></td> </s:if> <s:else> <td><s:property/></td> </s:else> </tr></s:iterator></table> 例3:<s:iterator value="groupDao.groups" status="groupStatus"> <tr

16、 class="<s:if test="#groupStatus.odd = true ">odd</s:if><s:else>even</s:else>"> <td><s:property value="name" /></td> <td><s:property value="description" /></td> <td> <s:iterator value=&quo

17、t;users" status="userStatus"> <s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if> </s:iterator> </td> </tr> </s:iterator> merge 標(biāo)簽(同append?)描述參數(shù)例子 sort 標(biāo)簽(JSP-Tag)描述對一個(gè)可以迭代的對象進(jìn)行排序操作。 參數(shù) 名字是否必

18、須默認(rèn)值可否使用表達(dá)式類型描述Comparator是 是排序用的比較器Source否 是String排序?qū)ο?#160;例子例1:<s:sort comparator="myComparator" source="myList"> <s:iterator> <!- do something with each sorted elements -> <s:property value="." /> </s:iterator></s:sort>&#

19、160;例2:<s:sort id="mySortedList" comparator="myComparator" source="myList" /><% Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList"); for (Iterator i = sortedIterator; i.hasNext(); ) / do something with each of the sorted elem

20、ents %> subset描述遞歸iterator的一部分 參數(shù)名字是否必須默認(rèn)值可否使用表達(dá)式類型描述countFalse 是IntegerIterator中被遞歸的一部分的item的數(shù)量Decider否 是ts2.util.SubsetIteratorFilter.Decider用來判斷iterator中的item是否包含在最終的subset內(nèi)部Source否 是StringIterator的對象Start否 是Integer開始位置 例子Java類 public class MySubsetTagAc

21、tion extends ActionSupport public String execute() throws Exception l = new ArrayList(); l.add(new Integer(1); l.add(new Integer(2); l.add(new Integer(3); l.add(new Integer(4); l.add(new Integer(5); return "done"    public Integer getMyArray() return a;   public List getMyLi

22、st() return l;   public Decider getMyDecider() return new Decider() public boolean decide(Object element) throws Exception int i = (Integer)element).intValue(); return (i % 2) = 0)?true:false); ; <!- s: List basic -> <s:subset source="myList"> <s:iterator> <s:prop

23、erty /> </s:iterator> </s:subset><!- B: List with count -> <s:subset source="myList" count="3"> <s:iterator> <s:property /> </s:iterator> </s:subset><!- C: List with start -> <s:subset source="myList" count=&qu

24、ot;13" start="3"> <s:iterator> <s:property /> </s:iterator> </s:subset><!- D: List with id -> <s:subset id="mySubset" source="myList" count="13" start="3" /> <% Iterator i = (Iterator) pageContext.getAtt

25、ribute("mySubset"); while(i.hasNext() %> <%=i.next() %> <% %><!- D: List with Decider -> <s:subset source="myList" decider="myDecider"> <s:iterator> <s:property /> </s:iterator> </s:subset> 數(shù)據(jù)標(biāo)簽TODO 完成如下數(shù)據(jù)標(biāo)簽數(shù)據(jù)標(biāo)簽包括a

26、 action bean date debug i18n include param push set text url property 4.2節(jié) UI標(biāo)簽UI標(biāo)簽主要是指Form相關(guān)的標(biāo)簽,UI標(biāo)簽又分為兩部分:form標(biāo)簽和構(gòu)成form內(nèi)部字段的其他標(biāo)簽。每一個(gè)UI標(biāo)簽都是基于模板的,即:每一個(gè)標(biāo)簽都有一個(gè)對應(yīng)的模板用來生成UI標(biāo)簽的樣式,詳細(xì)內(nèi)容參看模板節(jié)。 所有的UI標(biāo)簽都有著共通的祖先UIBean,UIBean提供了這些UI標(biāo)簽的一系列共通的屬性,這些屬性可以分為三類:模版相關(guān)的屬性,JavaScript相關(guān)的屬性和其他通用屬性。 模版相關(guān)屬性:屬性主

27、題數(shù)據(jù)類型說明templateDirn/aString定義模版目錄themen/aString定義主題的名字templaten/aString定義模版名字 JavaScript相關(guān)屬性:屬性主題數(shù)據(jù)類型說明onclicksimpleStringhtml javascript onclick 屬性ondbclicksimpleStringhtml javascript ondbclick屬性onmousedownsimpleStringhtml javascript onmousedown屬性onmouseupsimpleStringhtml javascript onmouseup屬

28、性onmouseoversimpleStringhtml javascript onmouseover屬性onmouseoutsimpleStringhtml javascript onmouseout屬性onfocussimpleStringhtml javascript onfocus屬性onblursimpleStringhtml javascript onblur屬性onkeypresssimpleStringhtml javascript onkeypress屬性onkeyupsimpleStringhtml javascript onkeyup屬性onkeydownsimpleSt

29、ringhtml javascript onkeydown屬性onselectsimpleStringhtml javascript onselect屬性onchangesimpleStringhtml javascript onchange屬性 Tooltip相關(guān)屬性:屬性數(shù)據(jù)類型默認(rèn)值說明tooltipStringnone為指定的組件設(shè)置TooltipjsTooltipEnabledStringfalse使用js表示tooltiptooltipIconString/struts/static/tooltip/tooltip.gif指向tooltip圖表的URLtooltipDel

30、ayString500多長時(shí)間后顯示Tooltip keysimpleString這個(gè)輸入字段對應(yīng)的屬性,用來自動設(shè)置name,label和value 通用屬性:屬性主題數(shù)據(jù)類型說明cssClasssimpleString定義html class 屬性cssStylesimpleString定義html style屬性titlesimpleString定義html title屬性disabledsimpleString定義html disabled屬性labelxhtmlString定義form字段的標(biāo)簽labelPositionxhtmlString定義標(biāo)簽在Form中的位置,從左

31、從上計(jì)算requiredPositionxhtmlString定義必須的標(biāo)簽在Form中的位置,從左從上計(jì)算namesimpleString定義form字段的name映射requiredxhtmlBoolean在label上添加一個(gè)*tabIndexsimpleString定義 html tabIndex屬性valuesimpleObject定義form字段的值 對于name和value的說明:name用來說明Form字段的名字,和Action類的屬性對應(yīng)。value用來記錄Form字段的值,和Action類中屬性的值對應(yīng)。所以在修改一個(gè)字段的內(nèi)容的時(shí)候應(yīng)該使用如下的標(biāo)簽:<s

32、:form action="updateAddress"> <s:textfield label="Postal Code" name="postalCode" value="%postalCode"/> .</s:form>但是,由于name和value的關(guān)系,struts2標(biāo)準(zhǔn)標(biāo)簽可以自動對應(yīng),所以也可以使用如下標(biāo)簽:<s:form action="updateAddress"> <s:textfield label="Postal

33、Code" name="postalCode" /> .</s:form> UI標(biāo)簽說明:Form部分autocompletercheckboxcheckboxlistcomboboxdatetimepickerdoubleselectheadfileformhiddenlabeloptiontransferselectoptgrouppasswordradioresetselectsubmittextareatextfieldtokenupdownselect 非Form部分:actionerroractionmessage

34、componentdivfielderrortabletabbedPaneltreetreenode 4.3節(jié) 主題和模板概念說明:標(biāo)簽(tag):一小段代碼,在JSP,Velocity或者FreeMarker中執(zhí)行。程序開發(fā)的最小單位,用來生成HTML對應(yīng)的元素。模板(template):一些代碼,通常使用FreeMarker寫成,可以被某些Tag表示出來(通常是UI Tag)。主題(theme):一組模板打包在一起,提供通用功能的模版 主題和模板主要針對可視化的標(biāo)簽(Tag)而言,使用以下例子來說明三者之間的關(guān)系。假如我們要開發(fā)如下的一個(gè)畫面:我們使用如下的代碼:

35、60;<s:url action="login" id="loginUrl"></s:url><s:form action="%loginUrl"><s:textfield label="Name" name="name"/><s:password label="Password" name="password" /><s:submit></s:submit><s:r

36、eset></s:reset></s:form> 這里<s:form>,<s:textfield>,<s:password>,<s:submit>,<s:reset>每一個(gè)都是一個(gè)標(biāo)簽(tag)。 我們在看看這些標(biāo)簽在一起生成的HTML源代碼:<form id="login" onsubmit="return true;"action="/login/login/login.action" method="po

37、st"><table class="wwFormTable"><tr><td class="tdLabel"><label for="login_name" class="label">Name:</label></td><td><input type="text" name="name" value="" id="login_name&qu

38、ot; /></td></tr> <tr><td class="tdLabel"><label for="login_password" class="label">Password:</label></td><td><input type="password" name="password" id="login_password" /></td&

39、gt;</tr> <tr><td colspan="2"><div align="right"><input type="submit" id="login_0"value="Submit" /></div></td></tr> <tr><td colspan="2"><div align="right">

40、<input type="reset" value="Reset" /></div></td></tr> </table></form> 在由標(biāo)簽生成HTML代碼的時(shí)候,例如:<s:textfield label="Name" name="name"/>生成的代碼為:<tr><td class="tdLabel"><label for="login_na

41、me" class="label">Name:</label></td><td><input type="text" name="name" value="" id="login_name" /></td></tr>我們可以看到,<s:textfield>標(biāo)簽提供的有效信息只有Name和name,而其余的部分,例如<tr>,<td>,<label>等代碼都根據(jù)一

42、個(gè)固定的模板文件生成,這個(gè)模板文件為:   標(biāo)簽使我們開發(fā)JSP畫面的時(shí)候使用的最小組件單元,我們根據(jù)客戶的需要組合各種Tag達(dá)到客戶的需求。模板是生成這些Tag時(shí)候使用的,使用模板可以定義Tag的基本形式,在使用tag的時(shí)候,我們只需要指定該Tag的不同屬性,即可根據(jù)Tag指定的特殊屬性,結(jié)合模板的基本屬性生成可視化的HTML元素。主題是不同tag結(jié)合在一起而形成的。<input type="text"<#rt/> name="$?default("")?html&

43、quot;<#rt/><#if parameters.get("size")?exists> size="$parameters.get("size")?html"<#rt/></#if><#if parameters.maxlength?exists> maxlength="$parameters.maxlength?html"<#rt/></#if><#if Value?exists>

44、value="<perty value="Value"/>"<#rt/></#if><#if parameters.disabled?default(false)> disabled="disabled"<#rt/></#if><#if parameters.readonly?default(false)> readonly="readonly"<#rt/></#if>

45、<#if parameters.tabindex?exists> tabindex="$parameters.tabindex?html"<#rt/></#if><#if parameters.id?exists> id="$parameters.id?html"<#rt/></#if><#if parameters.cssClass?exists> class="$parameters.cssClass?html"<#rt/></#

46、if><#if parameters.cssStyle?exists> style="$parameters.cssStyle?html"<#rt/></#if><#if parameters.title?exists> title="$parameters.title?html"<#rt/></#if><#include "/$parameters.templateDir/simple/scripting-events.ftl" /><#

47、include "/$parameters.templateDir/simple/common-attributes.ftl" />/> 我們考慮標(biāo)簽(Tag)使用模板(Template)生成HTML的過程,根據(jù)不同的模板,坑頂可以生成不同的HTML畫面,這樣我們可以把不同tag的,視覺效果一致的模板放在一起:例如:<s:form> TemplateForm_A, TemplateForm_B<s:textfield> TemplateTextField_A, TemplateTextField_B<s:password&

48、gt; TemplatePassword_A, TemplatePassword_B<s:submit>, TemplateSubmit_A, TemplateSubmit_B<s:reset> TemplateReset_A, TemplateReset_B 這樣將_A的模板放在一起叫做A主題(Theme),將_B的模板放在一起叫B主題。這樣我們在分別使用A主題,B主題的時(shí)候可以得到同一個(gè)Tag的不同的視覺效果。 模版和主題的概念處在Struts Tag的核心位置。 Struts2默認(rèn)提供了四種主題:Simple 主題:最簡單的主題XHT

49、ML 主題:默認(rèn)主題,使用常用的HTML技巧CSS XHTML主題: 使用CSS實(shí)現(xiàn)的XHTML主題AJAX 主題:基于XHTML主題,但是同工了AJAX功能 相關(guān)配置:在perties文件中有如下項(xiàng)目:struts.ui.theme=xhtmlstruts.ui.templateDir=templatestruts.ui.templateSuffix=ftl struts.ui.theme的值表示的是使用哪個(gè)主題,可選項(xiàng)位:xhtml,simple,css_html,ajax其中xhtml為默認(rèn)值。struts.ui.templateDir的值表示模板

50、的存放目錄。struts.ui.templateSuffix的值表示模板文件明的后綴,因?yàn)镾truts2默認(rèn)使用FreeMarker來編寫模板,所以這里我們基本使用ftl。 另外也可以使用vm(Velocity)和jsp(Java Server Page),但是所有的Template和Theme要我們自己開發(fā)。 關(guān)于模板文件的存放目錄我們需要詳細(xì)說明,如上述說明,模板文件的存放位置位template,那么系統(tǒng)在那里尋找template目錄呢,首先,在web應(yīng)用程序中查找,如果應(yīng)用程序中存在一個(gè)叫做template的目錄(跟WEB-INF目錄平級),那么所有的文件從這個(gè)目錄中取得,具體

51、的路徑還要加上主題的名字。然后,如果在web應(yīng)用程序中沒有找到template目錄,那么struts2會在classpath中尋找,由于struts2-core-.jar文件中存在template目錄,其中內(nèi)置了四種主題,所以會使用這里變的模板。例如:如果我們使用了ajax主題,那么會在如下位置超找<s:textfield>的主題應(yīng)用程序/template/ajax/textfield.ftlclasspath/template/ajax/textfield.ftl  修改或者擴(kuò)展模板:有些時(shí)候Struts提供的模板不一定能夠滿足我們的需求,這時(shí)候我們需要修改或

52、者擴(kuò)展現(xiàn)有模板。重新做新的模板是不明智的,如果是在需要全新的模板,可以考慮基于simple擴(kuò)展。 修改:根據(jù)模板的裝載機(jī)制,可以考慮將模板從struts2-core-.jar文件中解壓縮到web項(xiàng)目目錄,之后修改對應(yīng)的文件。 包裝:XHTML提供了一個(gè)很好的例子,simple主題提供了基本的功能,XHTML將它包括起來,例如:以下是template/xhtml/xxx.ftl(xxx表示模板名字)文件內(nèi)容:<#include "/$parameters.templateDir/xhtml/controlheader.ftl" /><#i

53、nclude "/$parameters.templateDir/simple/xxx.ftl" /><#include "/$parameters.templateDir/xhtml/controlfooter.ftl" /> 擴(kuò)展(extend):使用棉線對象的特性可以擴(kuò)展一個(gè)主題,擴(kuò)展一個(gè)主題的時(shí)候不需要實(shí)現(xiàn)所有的模板,只需要實(shí)現(xiàn)需要變化的標(biāo)簽。擴(kuò)展需要在目錄中新建一個(gè)叫做perties的文件,這個(gè)文件只有一行,表明了繼承而來的主題的名字,例如:/template/ajax/perti

54、es文件內(nèi)容為:parent = xhtml  4.4節(jié) AJAX標(biāo)簽(試驗(yàn)階段)Struts2內(nèi)置了Dojo 0.4 來提供對Ajax的支持。想要使用AJAX標(biāo)簽需要做到兩點(diǎn):1 使用Ajax主題2 在JSP畫面中使用了head標(biāo)簽配置Ajax屬性 AJAX標(biāo)簽主要有:<s:div> <s:submit><s:a><s:tabbedPanel><s:autocompleter> AJAX標(biāo)簽的一些通用屬性:屬性說明類型href請求使用的URLStringlistenTopic使用逗號分割的一組

55、主題列表,這個(gè)列表中的主題會導(dǎo)致這個(gè)Tag自己內(nèi)容(Div,Autocompleter)重新裝載或者執(zhí)行一個(gè)Action(Anchor,Submit)StringnotifyTopic使用逗號分割的一組主題列表,向這個(gè)列表中的主題發(fā)布一些信息,例如:data,type,request,參看每個(gè)標(biāo)簽的詳細(xì)說明StringshowErrorTransportText設(shè)置是否顯示錯(cuò)誤消息(默認(rèn)顯示)Booleanindicator請求過程中顯示的對象,通常位ProgressBar等String Indicator<img style="display:none"

56、src="$pageContext.request.contextPath/images/indicator.gif" alt="Loading."/> Topic監(jiān)聽一個(gè)Topic:dojo.event.topic.subscribe("/refresh", function(param1, param2) /this function will be called everytime "/refresh" is published);向一個(gè)Topic發(fā)布內(nèi)容:dojo.event.topic.p

57、ublish("/refresh", "foo", "bar"); URLHref屬性對應(yīng)的URL必須使用URL標(biāo)簽定義,例如:<s:url id="ajaxTest" value="/AjaxTest.action" /><s:div theme="ajax" href="%ajaxTest"> Initial Content</s:div> DIV標(biāo)簽:Div主要用來異步的顯示數(shù)據(jù), PageLo

58、ad會出發(fā)Div中數(shù)據(jù)的顯示,除非把AutoStart設(shè)置為False。另外,Div的數(shù)據(jù)顯示可以使用Topic來觸發(fā)。使用listenTopic來定義觸發(fā)器。 例如:<s:url id="ajaxTest" value="/AjaxTest.action" /><s:div theme="ajax" href="%ajaxTest" listenTopics="/refresh0,/refresh1"/>每次想/refresh0,/refresh1發(fā)布內(nèi)容的時(shí)

59、候,上面代碼定義的div都會刷新。 使用updateFreq可以讓Div周期性的觸發(fā),在autoStart設(shè)置位true的情況下,可以使用delay來延遲首次畫面加載的出發(fā)時(shí)間,例如:<s:url id="ajaxTest" value="/AjaxTest.action" /><s:div theme="ajax" href="%ajaxTest" updateFreq="2000" delay="3000"/>上述代碼說明,每隔2秒該di

60、v觸發(fā)內(nèi)容更新一次,但是首次畫面加載完成之后3秒div出發(fā)內(nèi)容更新。 todo 其他標(biāo)簽   4.5節(jié) OGNLOGNL是Object Graph Navigation Language的簡稱,詳細(xì)相關(guān)的信息可以參考:。這里我們只涉及Struts2框架中對OGNL的基本支持。 OGNL是一個(gè)對象,屬性的查詢語言。在OGNL中有一個(gè)類型為Map的Context(稱為上下文),在這個(gè)上下文中有一個(gè)根元素(root),對根元素的屬性的訪問可以直接使用屬性名字,但是對于其他非根元素屬性的訪問必須加上特殊符號#。 在Struts2中上下文為Ac

61、tionContext,根元素位Value Stack(值堆棧,值堆棧代表了一族對象而不是一個(gè)對象,其中Action類的實(shí)例也屬于值堆棧的一個(gè))。ActionContext中的內(nèi)容如下圖: | |-application | |-sessioncontext map-| |-value stack(root) | |-request | |-parameters | |-attr (searches page, request, session, then application scopes) |因?yàn)锳ction實(shí)例被放在Value Stack中,而Value Stack又是根元素(root

62、)中的一個(gè),所以對Action中的屬性的訪問可以不使用標(biāo)記#,而對其他的訪問都必須使用#標(biāo)記。 引用Action的屬性<s:property value="postalCode"/>ActionContext中的其他非根(root)元素的屬性可以按照如下的方式訪問:<s:property value="#session.mySessionPropKey"/> or<s:property value="#session"mySessionPropKey""/> or<

63、;s:property value="#request"mySessionPropKey"/> Action類可以使用ActionContext中的靜態(tài)方法來訪問ActionContext。ActionContext.getContext().getSession().put("mySessionPropKey", mySessionObject); OGNL與Collection(Lists,Maps,Sets) 生成List的語法為: e1,e2,e3.<s:select label="label" name="name" list="'name1','name2','name3'" value="%'name2'" />上面的代碼生成了一個(gè)HTML Select對象,可選的內(nèi)容為: name1,name2,name3,默認(rèn)值為:name2。 生成Map的語法為:#key1:value1,key2:value2.<s:select label="label"

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論