亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JavaPub系列--webwork開發指南-2

2019-11-18 14:23:38
字體:
來源:轉載
供稿:網友

5 Value Stack
5.1 VS是什么?
Value Stack(VS)是一個非常有用的類,可以用來支持ww的表達式語言(EL),通過它的findValue和test方法,分別用來計算值和條件表達式。VS為EL提供了管道,它具有瀏覽stack和flatten out對象的能力,來得到想要的數據。
5.2 如何使用
下列是客戶如何使用VS來滿足需要的部分范例:
? EL 使用 VS 來找到操作數的值.
? ServletDispatcher 將使用 VS 來將它自己壓棧,假如一個 view 附加到一個Action. 在view顯示之后,這個對象將從棧中移去.
? Tags 使用 VS 來將值壓棧,所以在body的contents中可以訪問這些值。例如: Iterator將next項放到棧內以供body使用,當達到結束的tag,這些值就從棧中移去。
? 對于 UI tags, 他們的父 ComponentTag 將自己壓棧,所以模版可以訪問它的tag的值.
? BeanTag 將它自己壓棧以給body部分來訪問它的值。
? i18nTag 將合適的資源包壓棧來找到正確的國際化的文本。.
? 等等. ...
一旦對象是在堆棧中,你就可以通過EL語法來訪問他們的值,對于EL的細節請察看參考部分.
5.3 基本組成
Object findValue(String query)
這個方法是用來從帶有一個EL查詢的VS中找到一個值。 查詢是分段的,每段依次求值運算each segment in turn is evaluated. 這個求值可能在棧上尋找一個合適的對象,并調用適當的方法,來查找希望的值。結果是一個對象或者為null.
boolean test(String test)
這個方法用來解析一個條件表達式.條件的 tags if 和 elseIf 將調用這個方法來對條件語句進行運算.
ValueHolder (VH)
VH 是一個你可以實現的接口,答應你對對象進行lazy賦值,當VS找到它。例如:你可以創建一個實現了VH的匿名類并將哪個類壓棧,當其他人找到這個對象,VS將調用這個類getValue()并返回值.
ValueStack getStack(PageContext context)
為PageContext 找到 ValueStack.假如找不到,將創建一個。對于每個PageContext只有一個stack,任何tag需要一個VS將調用這個方法.
ValueStack getStack(ServletRequest request)
為ServletRequest 找到ValueStack. 假如找不到,將創建一個,對于每個ServletRequest只有一個stack與之對應。任何一個servlet dispatcher 假如需要一個 VS 將調用這個方法.
Object popValue()
一個對象出棧. 返回一個對象,假如棧為空,則返回null.
void pushValue(Object value)
將對象壓棧.
6 表達式語言EL
6.1 為什么需要EL?
表達式在今天的計算機科學中都可以發現。最聞名的例子是常規表達式,常規表達式是一種迷你型語言,答應你用來描述和解釋文本,這是許多編程語言、編程環境、和程序的核心 。在如此多的領域都有常規表達式,是因為它強大的功能。
常規表達式答應你把握你的數據,它是一種程序語言,讓你能夠控制數據,并讓數據為你工作,讓你用一些簡單的符號來解決一些原本需要復雜和麻煩的編程的問題。
常規表達式是被開發用來解決與文本處理相關的一系列非凡問題的。 EL的設計是為了解決一系列與jsp有關的問題。
所以我們來看一些范例,來強調一下普通的JSP和使用WW增強的JSP代碼的區別。
讀取數據的示例:
? 使用WW方式
? Number of guesses = <webwork:PRoperty value="guessBean/numGuesses"/>

? 純 JSP方式
? <%@ page import="webwork.action.test.NumberGuessBean"%>
? ...
? <jsp:useBean id="numguess" class="webwork.action.test.NumberGuessBean" scope="session"/>
? Number of guesses = <%= numguess.getNumGuesses()%>

EL 改善了代碼的可都性,在上面的例子中WW 調用Action的getGuessBean() 然后調用bean的 getNumGuesses() ?,F在來比較這些精簡的符號與第二個JSP列表. WW方式是更精簡,易于閱讀,表達得更清楚,我們不用擔心范圍、類、方法等,頁面設計者不應該厭煩這些信息。
條件判定范例:
? WW方式
? <webwork:if test="guessBean/sUCcess==true"/>
? Congratulations! You got it.
? And after just <webwork:property value="guessBean/numGuesses"/> tires.<p>
? Not sure what to do here?
? Care to <a href="<webwork:url page="numguess.action?begin=true"/>">try again</a>?
? </webwork:if>

? 普通JSP 方式
? <% if (numguess.getSuccess()) { %>
? Congratulations! You got it.
? And after just <%= numguess.getNumGuesses() %> tries. <p>
? <% numguess.reset(); %>
? Not sure what to do here?
? Care to <a href="<%=response.encodeURL(numguess.jsp)%>"/>">try again</a>?
? <% } %>

在這個例子中,我們進行了條件判定. WW 調用Action的 getGuessBean()然后調用 getSuccess() 來返回一個布爾值. 假如success的值為true,那么 條件體將被執行. 同JSP寫法相比. WW方式很輕易閱讀,另外WW支持一個相等的條件運算符。另外要注重WW如何來使用它自己的url tag來處理url編碼。
復雜數據范例:
? WW 方式
? <webwork:if test="bucket[′A1′]/bucket[′A2′]/bucket[′A3′]/empty==true"/>
? Success
? </webwork:if><br>

? 普通JSP 方式
? <% Map m = bucket.getbucket();
? Bucket A1 = (Bucket)m.get("A1");

? m = A1.getBucket();
? Bucket A2 = (Bucket)m.get("A2");

? m = A2.getBucket();
? Bucket A3 = (Bucket)m.get("A3");

? if (A3.isEmpty()) { %>
? Success
? <% } %><br>

這個例子中, 我們在處理一系列的 Map. 在用WW的方式中, bucket A1 被找到 retrieved, 然后在A1中找到 bucket A2 , 然后從A2中找到 bucket A3 ,最后調用 isEmpty(). 這種比JSP的例子中簡潔得多.我們不用寫java代碼來展開這些數據. EL 給與了我們展開一系列Maps的能力并查找到我們需要的數據. 另外, 頁面設計人員不用擔心設計時寫java代碼或察看這些內容.
我們學習了一些例子來明確典型JSP與WW的區別。WW的亮點在于讀取數據、條件測試、用EL來掌管數據。但這些只是一些簡單的提示。.
6.2 在什么地方使用EL?
EL 可以使用在任何的WW tag的屬性中,除開id tag外. id 應該是一個沒有省略符號的字符串. 條件表達式僅用于for if 和elseif tag的test屬性.
例如: 我們來看 subset tag. EL 在它的所有屬性中使用. Subset 有3個屬性: source, count, 和 start.
In this example, we specify 10 and 5 for subset attributes start and count respectively. EL will evaluate these and turn them into Integers.
<iterator:subset start="10" count="5">
<webwork:iterator>
<webwork:property/><br>
</webwork:iterator>
</iterator:subset>
6.3 表達式類型
EL有兩種主要用途:求值表達式和條件表達式. 求值表達式答應你從許多位置、范圍、對象類型中抽取數值. 條件表達式答應你使用條件運算符來評價一個或多個操作數,操作數本身也是一個值表達式.
Value EXPressions
求值表達式和條件表達式. 求值表達式答應你從許多位置、范圍、對象類型中抽取數值. 例如,
? 在JSP頁面、Request, Session, 和 application 范圍你可以使用@符號找到屬性值. 例如:假設timer在頁面范圍被定義 i.e. - id="timer". WW 將找到這個屬性并調用 getTotal() 來返回值.
? <webwork:property value="@timer/total"/>

? 使用$符號,可以得到JSP中ServletRequest參數的值. 本例中,假設參數 footer 被傳遞給本頁. 我們檢查并察看 if $footer=′jobcode′. 假如為真,則包含 Html table.
? <webwork:if test="$footer==′jobcode′">
? <table border="0" cellpadding="0" cellspacing="3" width="100%" align="center">
? <tr>
? <td><input type="Submit" name="Submit" value="<webwork:text name="′addJobcode.text′"/>"></td></tr>
? </table>
? </webwork:if>

? 使用正確的標示符,可以從Action getters 中獲取值.這包含調用帶參數的方法,返回簡單或復雜的對象. 例子中, WW 調用 getSecond(param1, param2).
? <webwork:property value="second(′one′, ′two′)"/>

? 使用“/”符號可以在一個層次數據中查找. 例子中,當前值被使用并調用 getPerson()方法. 然后, WW將對前面方法返回的值調用 getName().
? <webwork:property value="person/name"/>

? 也可以直接訪問ValueStack 來找到當前、父、或根對象.例子中, iterator tag 將 next item 壓棧,給body使用,所以“.” 是指向這個值.
? <ol>
? <webwork:iterator value="times">
? <li><webwork:text name="{}" value0="."/>
? </webwork:iterator>
? </ol>

條件表達式Conditional Expressions
條件表達式答應你使用條件運算符來計算一個或多個操作數,這些操作數本身就是值表達式。例如:
? 檢查一個對象是否為null. 在例子中假如 @matt 為 null 則Success 被打印出來。
? <webwork:if test="!@matt">
? <b>Success</b>
? </webwork:if>

? 可以計算兩個操作數的條件表達式You can evaluate conditionally with two Operands. 例子中,假如if條件為true,就執if的主體。
? <webwork:if test="′hello′ == ′hello′">
? <b>Success</b>
? </webwork:if>

? You can set precedence when evaluating conditional expressions with (). In this example, we group conditional expressions together. Note that the operands are themselves value expressions.
? <webwork:if test="bool(′true′) == true && (bool(′false′) == true settings[′foo′] == ′bar′)">
? <b>Success</b>
? </webwork:if>

總之, WW的表達式語言是一個強大的工具,讓你在訪問數據時有很大的靈活性,讓頁面設計人員很輕易的將數據拖到視圖上來。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品在线播放| 中文字幕av一区二区| 2021久久精品国产99国产精品| 91精品国产综合久久香蕉最新版| 国产欧美va欧美va香蕉在| 亚洲女人天堂视频| 在线观看国产精品91| 久久久亚洲精选| 亚洲天堂一区二区三区| 欧美极品少妇全裸体| 欧美国产日韩二区| 欧美电影在线观看| 亚洲欧美制服中文字幕| 国产欧美精品在线| 91精品国产91久久久久福利| 亚洲国产精品va在线看黑人| 91视频免费在线| 国产精品国产自产拍高清av水多| 最新中文字幕亚洲| 欧美性生交xxxxx久久久| 亚洲国产私拍精品国模在线观看| 北条麻妃99精品青青久久| 欧美久久久精品| 欧美性在线观看| 亚洲护士老师的毛茸茸最新章节| 久久精品中文字幕电影| 日韩在线视频观看| 国产97人人超碰caoprom| 国产精品久久久久久中文字| 日韩av免费在线观看| 亚洲香蕉成人av网站在线观看| 国产日韩精品入口| 欧美一区二区三区免费视| 日韩中文字幕不卡视频| 欧美成年人视频网站欧美| 亚洲精品电影在线观看| 成人做爽爽免费视频| 日韩中文字幕网站| 欧洲成人性视频| 国产精品观看在线亚洲人成网| 国产精品18久久久久久麻辣| 国产91精品网站| 色综合久久久久久中文网| 欧美性生活大片免费观看网址| 热久久这里只有精品| 成人一区二区电影| 亚洲欧美自拍一区| 国产精自产拍久久久久久| 中文字幕亚洲字幕| 欧美日韩国产综合视频在线观看中文| 日韩69视频在线观看| 国产精品一区av| 日韩精品在线电影| 91av免费观看91av精品在线| 日韩av免费观影| 亚洲精品视频网上网址在线观看| 日韩精品电影网| 欧美激情一区二区久久久| 精品久久久久久久久久久| 午夜精品视频在线| 57pao国产成人免费| 国产精品第100页| 欧美日韩国产一区二区三区| 精品亚洲aⅴ在线观看| 91精品久久久久久| 久久久精品国产一区二区| 一本色道久久综合狠狠躁篇的优点| 日韩av在线最新| 亚洲自拍欧美色图| 欧美成人精品三级在线观看| 午夜精品三级视频福利| www欧美xxxx| 亚洲jizzjizz日本少妇| 亚洲色图综合网| 黄色成人在线免费| 91豆花精品一区| 欧美日韩人人澡狠狠躁视频| 国产精品视频网站| 精品成人国产在线观看男人呻吟| 68精品国产免费久久久久久婷婷| 97高清免费视频| 亚洲乱码一区av黑人高潮| 岛国av在线不卡| 亚洲网站在线播放| 日韩精品在线观看视频| 成人在线小视频| 欧美网站在线观看| 亚州精品天堂中文字幕| 午夜精品蜜臀一区二区三区免费| 国产精品主播视频| 国产一区二区三区高清在线观看| 国产男人精品视频| 亚洲精品在线观看www| 久久频这里精品99香蕉| 精品久久久久久久久国产字幕| 国产精品视频区1| 日韩黄色在线免费观看| 亚洲精品小视频| 成人免费视频在线观看超级碰| 国产成人一区二区三区| 日韩电影中文 亚洲精品乱码| 欧美电影在线免费观看网站| 亚洲激情在线观看视频免费| 欧美香蕉大胸在线视频观看| 亚洲国产成人91精品| 国产精品久久久久久亚洲调教| 九九热这里只有精品免费看| 97碰碰碰免费色视频| 一区二区成人av| 成人精品久久一区二区三区| 日韩国产在线看| 亚洲国产第一页| 久久精品国产99国产精品澳门| 色悠久久久久综合先锋影音下载| 7m第一福利500精品视频| 97精品一区二区视频在线观看| 亚洲大胆人体av| 欧美午夜精品久久久久久人妖| 久久久人成影片一区二区三区观看| 这里只有精品视频| 黄色一区二区在线观看| xvideos成人免费中文版| 国产一区二区黑人欧美xxxx| 超碰97人人做人人爱少妇| 日韩在线播放一区| 日韩中文视频免费在线观看| 亚洲国产精彩中文乱码av| 亚洲aa在线观看| 欧美视频专区一二在线观看| 亚洲free性xxxx护士白浆| 亚洲日本成人女熟在线观看| 亚洲成人精品视频在线观看| 日韩视频在线观看免费| 黑人极品videos精品欧美裸| 中文字幕亚洲一区在线观看| 国产亚洲欧美视频| 亚洲国产精品999| 麻豆国产精品va在线观看不卡| 亚洲国产一区二区三区在线观看| 日韩高清人体午夜| 国产精品日日摸夜夜添夜夜av| 中文字幕av一区中文字幕天堂| 精品免费在线视频| 国产一区二区丝袜| 欧美成人免费在线视频| 91在线高清免费观看| 亚洲精品欧美一区二区三区| 国产成人精品在线| 亚洲欧美一区二区三区久久| 国产精品一区二区三区久久久| 成人久久久久久久| 国产z一区二区三区| 欧美高清在线观看| 亚洲黄色成人网| 国产精品久久999| 国产精品久久久久久久久久小说| 久久久久国色av免费观看性色| 欧美日韩在线观看视频小说| 国产脚交av在线一区二区| 少妇高潮久久77777| 精品久久久国产| 国产欧美va欧美va香蕉在线| 国产午夜精品视频免费不卡69堂| 日韩色av导航|