日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用struts 2 获取服务器数据 ongl表达式 标签

發(fā)布時(shí)間:2025/4/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用struts 2 获取服务器数据 ongl表达式 标签 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先引入Struts的標(biāo)簽庫<%@taglib prefix="s" uri="/struts-tags"%>

如取得action中User 對(duì)象的name屬性,應(yīng)該用el表達(dá)式這樣寫${User.name}

${}是EL語言的 %{}形式是ognl表達(dá)式語言的,在struts2的標(biāo)簽內(nèi)部,使用%{}這樣的形式,在標(biāo)簽外部可以使用${}EL語言的方式。在struts2的標(biāo)簽內(nèi)部不允許使用${}這樣的形式。?

下文轉(zhuǎn)至:http://www.blogjava.net/amigoxie/archive/2007/07/29/133087.html

說明:本文大部分內(nèi)容翻譯自struts-2.0.8-all/struts-2.0.8/docs/docs/using-tags.html,并將struts2的標(biāo)簽作為附錄補(bǔ)充,標(biāo)簽尚有部分未補(bǔ)充完。

?在上篇(Hello World篇)中,我們呈現(xiàn)了一個(gè)簡(jiǎn)單的歡迎界面。在本篇中,我們將創(chuàng)建鏈接到應(yīng)用其他Action的鏈接。

?Web應(yīng)用程序與傳統(tǒng)的Web站點(diǎn)有所不同,在Web應(yīng)用程序中我們可以創(chuàng)建動(dòng)態(tài)的返回。為了更容易的在頁面上獲得動(dòng)態(tài)數(shù)據(jù),本框架提供了一些標(biāo)簽集。其中有些標(biāo)簽?zāi)M了標(biāo)準(zhǔn)的HTML標(biāo)簽,但是提供了一些額外功能。還有一些框架提供了非標(biāo)準(zhǔn)的、但非常有用的控制功能。

?Struts標(biāo)簽的一個(gè)使用是創(chuàng)建一個(gè)到另外的Web資源的訪問鏈接,特別是到本地的其他資源的鏈接。

說明:雖然HTML為創(chuàng)建超鏈接提供了簡(jiǎn)單的標(biāo)簽,HTML標(biāo)簽常常需要我們包括一些冗余的信息。并且HTML標(biāo)簽不能很容易的得到本框架的動(dòng)態(tài)數(shù)據(jù)。

一.?????????????鏈接標(biāo)簽

?在Web應(yīng)用程序中的一個(gè)常用的功能是鏈接到其他頁面,現(xiàn)在讓我們?yōu)榍懊嬲鹿?jié)的歡迎界面添加到其他Action的鏈接。

二.?????????????代碼

顯示注冊(cè)與登錄的jsp的代碼如下:

<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> ??? <title>Welcome</title> ??? <link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet" ????????? type="text/css"/> </head> <body> <h3>Commands</h3> <ul> ??? <li><a href="<s:url action="Register"/>">Register</a></li> ??? <li><a href="<s:url action="Logon"/>">Sign On</a></li> </ul> </body> </html>

?運(yùn)行效果如下:

?

?另一個(gè)常用的功能是使用鏈接來改變語言,在前章的HelloWorld頁面中,讓我們改變用戶的語言,并根據(jù)對(duì)應(yīng)的應(yīng)用程序資源來呈現(xiàn)信息。代碼如下:

<body> <h2><s:property value="message"/></h2> <h3>Languages</h3> <ul> ??? <li> ??????? <s:url id="url" action="HelloWorld"> ??????????? <s:param name="request_locale">en</s:param> ??????? </s:url> ??????? <s:a href="%{url}">English</s:a> ??? </li> ??? <li> ??????? <s:url id="url" action="HelloWorld"> ??????????? <s:param name="request_locale">es</s:param> ??????? </s:url> ??????? <s:a href="%{url}">Espanol</s:a> ??? </li> </ul> </body>

?運(yùn)行效果如下:

?

一.?????????????代碼是如何工作的?

?上述例子中的“%{url}”將會(huì)被s:url標(biāo)簽來求得對(duì)應(yīng)的值。在Welcome和HelloWorld頁中,我們使用了兩種不同的鏈接標(biāo)簽。我們可以創(chuàng)建如下標(biāo)簽:

l?????????資源鏈接

l?????????直接的鏈接

l?????????帶參數(shù)的鏈接

?下面讓我們分別看一下它們的使用:

1.???????資源鏈接

首先在jsp的HEAD元素中,我們使用url標(biāo)簽來將資源引入到頁面中,代碼如下:

<link href="<s:url value="/css/tutorial.css"/>" ??rel="stylesheet" type="text/css"/>

注意:引用時(shí)絕對(duì)的。我們可以移動(dòng)該頁面到其他路經(jīng)而不用擔(dān)心相對(duì)路徑。

2.直接鏈接

?我們可以使用鏈接標(biāo)簽來定向到Action,實(shí)例代碼如下:

<li><a href="<s:url action="Register"/>">Register</a></li>

?當(dāng)鏈接運(yùn)作的時(shí)候,鏈接標(biāo)簽?zāi)軌蜃詣?dòng)追加正確的擴(kuò)展,因此我們不需要在應(yīng)用程序中嵌入。這個(gè)標(biāo)簽也將會(huì)用會(huì)話id來編碼鏈接的URL,因此Java的會(huì)話在請(qǐng)求之間能夠保持。

3.帶有參數(shù)的鏈接

?在上述的有關(guān)改變語言的HelloWorld頁中,我們可以使用帶有參數(shù)信息的url標(biāo)簽來創(chuàng)建帶有參數(shù)的鏈接,該段代碼如下:

?<s:url id="url" action="Welcome"> ?<s:param name="request_locale">en</s:param> </s:url> <s:a href="%{url}">English</s:a>

?param標(biāo)簽將會(huì)在Welcome的Action的url后增加信息:“?request_locale=en”。這個(gè)標(biāo)簽接著將“url”引用注入到超鏈接中。

?說明:通過增加param標(biāo)簽?zāi)軌蛟黾尤我鈹?shù)量的標(biāo)簽。

二.?????????????通配符映射

?在上述例子的Welcome頁面中,除了鏈接之外尚未添加任何內(nèi)容,我們不需要添加Action類。但是,我們?nèi)匀恍枰砑右粋€(gè)映射,以便我們可以使用action URI(如果我們向映射到action,而不是頁面,我們?cè)诤竺嬉部梢院苋菀椎奶砑覣ction類),映射代碼如下:

<action name="Welcome" > ?<result>/tutorial/Welcome.jsp</result> </action>

?當(dāng)我們創(chuàng)建應(yīng)用程序的時(shí)候,我們常常需要直接鏈接到頁頁面,為了使原型更加容易,我們可以將Welcome的進(jìn)入改為通配符,修改后的映射如下:

?<action name="*" > ?<result>/tutorial/{1}.jsp</result> </action>

?這是代碼是如何工作的呢?

?如果找不到映射,本框架將會(huì)做如下工作:

l?????????將“Welcome”映射為星號(hào)

l?????????將“Welcome”代替result中對(duì)應(yīng)的“{1}”

?同樣的,如果在映射文件中找不到“Login”的映射,將會(huì)映射到“/tutorial /Login.jsp”頁面。

?說明:通配符映射能夠使得你能夠創(chuàng)建你自己的規(guī)約,以便你能夠避免冗余的配置。

三.?????????????數(shù)據(jù)輸入表單

?大多數(shù)應(yīng)用程序都使用一些數(shù)據(jù)進(jìn)入表單。Struts標(biāo)簽使得輸入表單更加容易,代碼如下:

<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> ?<title>Login</title> </head> <body> <s:form action="Logon"> ??<s:textfield label="User Name" name="username"/> ?<s:password label="Password" name="password" /> ?<s:submit/> </s:form> </body> </html>

?執(zhí)行效果如下:

?

?代碼是如何工作的呢?

l?????????JSP標(biāo)簽在頁面頂部引入了Struts的標(biāo)簽庫

l?????????Struts標(biāo)簽:textfield、password和submit,每一個(gè)都寫出了正確的Lable和控制類型

四.?????????????需要記住的東西

?編寫web應(yīng)用程序的最難的一部分是編寫頁面。本框架通過提供一系列的Struts標(biāo)簽使得編寫頁面更加容易。Struts標(biāo)簽?zāi)軌颢@得框架提供的動(dòng)態(tài)數(shù)據(jù)。標(biāo)簽減少了用來創(chuàng)建頁面所需做的工作。

?????????????????????????????????????????????????????????????????????????????????????????????? 附錄一

——標(biāo)簽使用指南

一.?????????????通用標(biāo)簽

?通用標(biāo)簽被用來在頁面執(zhí)行的時(shí)候,來控制執(zhí)行流。這些標(biāo)簽同樣允許數(shù)據(jù)不是從Action或者值棧中提取,例如本地化、JavaBeans、包括額外的URL或action執(zhí)行。

l?????????控制類標(biāo)簽提供了控制流,例如if,else和iterator

l?????????數(shù)據(jù)類標(biāo)簽允許數(shù)據(jù)操作或創(chuàng)建,例如bean、push和i18n

?控制類標(biāo)簽有if、elseIf、?else、append、generator、iterator、merge、sort、subset。

?數(shù)據(jù)類標(biāo)簽有a、action、bean、date、debug、i18n、include、param、push、set、text、url、property。

?分別介紹如下:

1.???????控制類標(biāo)簽

1)if、elseif和else

描述:執(zhí)行基本的控制流,if能單獨(dú)使用,也可與else、elseif標(biāo)簽搭配使用。

參數(shù):

名稱

必選

默認(rèn)值

求值

類型

描述

id

?

String

id用來引用元素。對(duì)于UI或者form標(biāo)簽,它的意義等同于HTML的id屬性

test

?

Boolean

用來決定標(biāo)簽體師是否顯示的表達(dá)式

使用舉例:

<s:if test="%{false}"> ??? <div>Will Not Be Executed</div> </s:if> <s:elseif test="%{true}"> ??? <div>Will Be Executed</div> </s:elseif> <s:else> ??? <div>Will Not Be Executed</div> </s:else>

2)append

該標(biāo)簽的工作是追加迭代器來,

例如,如果有三個(gè)迭代器(每個(gè)迭代器有三個(gè)元素)需要追加,下面展示了這個(gè)追加迭代器是如何排列的。

???首先是進(jìn)入第一個(gè)迭代器的第一個(gè)元素;

???第二步是進(jìn)入第一個(gè)迭代器的第二個(gè)元素;

???第三步是進(jìn)入第一個(gè)迭代器的第三個(gè)元素;

???第四步是進(jìn)入第二個(gè)迭代器的第一個(gè)元素;

???第五步是進(jìn)入第二個(gè)迭代器的第二個(gè)元素;

???第六步是進(jìn)入第二個(gè)迭代器的第三個(gè)元素;

???第七步是進(jìn)入第三個(gè)迭代器的第一個(gè)元素;

???第八步是進(jìn)入第三個(gè)迭代器的第二個(gè)元素;

???第九步是進(jìn)入第三個(gè)迭代器的第三個(gè)元素。

參數(shù):

名稱

必選

默認(rèn)值

求值

類型

描述

id

?

String

如果提供了該id的值,將會(huì)具有追加迭代器存儲(chǔ)到堆棧上下文中的合成結(jié)果

使用舉例:

Action類的代碼:


publicclassAppendIteratorTagAction?extendsActionSupport?{
?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");
?
?????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()?{?return?myList1;?}
?public?List?getMyList2()?{?return?myList2;?}
?public?List?getMyList3()?{?return?myList3;?}

?jsp頁面的代碼:

?<s:append id="myAppendIterator"> ???? <s:param value="%{myList1}" /> ???? <s:param value="%{myList2}" /> ???? <s:param value="%{myList3}" /> </s:append> <s:iterator value="%{#myAppendIterator}"> ???? <s:property /> </s:iterator>

?3)generator

?描述:創(chuàng)建一個(gè)基于提供的值的迭代器。

???注意:產(chǎn)生的迭代器將常常被推入堆棧頂部,而在標(biāo)簽結(jié)束的時(shí)候被推出。

?參數(shù):

名稱

必選

默認(rèn)值

求值

類型

描述

converter

?

org.apache.struts2.util.IteratorGenerator.Converter

將從值中分析的字符串轉(zhuǎn)換為一個(gè)對(duì)象的轉(zhuǎn)換器

count

?

Integer

在迭代器中的最大值

id

?

String

如果提供了id,它將會(huì)用來存儲(chǔ)產(chǎn)生的迭代器到頁面上下文

separator

?

String

分隔符用來將迭代器中的值分開

val

?

String

用來解析成迭代器的源

?舉例:

?例1: <pre> 例一: 產(chǎn)生一個(gè)簡(jiǎn)單的迭代器 <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}"> <s:iterator> ???? <s:property /><br/> </s:iterator> </s:generator> </pre> 這里產(chǎn)生了一個(gè)迭代器,并且使用iterator標(biāo)簽將它打印出來 例二: <pre> 產(chǎn)生一個(gè)帶有count屬性的迭代器 <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3"> <s:iterator> ???? <s:property /><br/> </s:iterator> </s:generator> </pre> 這里產(chǎn)生了一個(gè)迭代器,但是只有其中的三個(gè)元素是可用的,這三個(gè)分別是aaa、bbb和ccc 例三: <pre> 產(chǎn)生一個(gè)帶有id屬性的迭代器 <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" /> <% Iterator i = (Iterator) pageContext.getAttribute("myAtt"); while(i.hasNext()) { ???? String s = (String) i.next(); %> ???? <%=s%> <br/> <%??? } %> </pre> 產(chǎn)生了一個(gè)迭代器,并且將它存入頁面上下文的指定的id(myAtt)屬性中。 例四: <pre> 帶有converter屬性的generator標(biāo)簽 <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}"> <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-"+value; ???????? } ???? }; ?} ?... } </pre> 產(chǎn)生的這個(gè)迭代器,它的每個(gè)元素由提供的轉(zhuǎn)換器獲得。在這個(gè)轉(zhuǎn)換器中,只是為每個(gè)元素增加了“converter-”。 this converter, it simply add "converter-" to each entries.

?4)iterator

?描述:迭代器將會(huì)迭代值。一個(gè)可迭代的值可以是java.util.Collection,也可以是java.util.Iterator。

?參數(shù):

名稱

必選

默認(rèn)值

求值

類型

描述

id

?

String

id用來引用元素。對(duì)于UI和表單標(biāo)簽,它與HTML的id標(biāo)簽相當(dāng)

status

Boolean

如果該值被指定,一個(gè)迭代狀態(tài)的實(shí)例將會(huì)在每一個(gè)迭代中被推入堆棧中

value

?

String

用來進(jìn)行迭代的迭代源,否則對(duì)象本身將會(huì)被放入新的產(chǎn)生的列表中

?舉例:

?下面的例子取回在值棧中的當(dāng)前對(duì)象的getDays()所返回的值,<s:property/>標(biāo)簽打印出當(dāng)前迭代器的值,代碼如下:

<s:iterator value="days">

?<p>day is:?<s:property/></p>

</s:iterator>

???在下面的例子中使用Bean標(biāo)簽并且將它存入ActionContext中。iterator標(biāo)簽將會(huì)從ActionContext中取回對(duì)象而后調(diào)用它的getDays()方法。狀態(tài)屬性常常用來創(chuàng)建IteratorStatus對(duì)象,在這個(gè)例子中,它的odd()方法用來改變行的顏色。

<s:bean name="org.apache.struts2.example.IteratorExample" id="it"> ?<s:param name="day" value="'foo'"/> ?<s:param name="day" value="'bar'"/> </s:bean> <p/> <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"> ????? <td style="background: grey"><s:property/></td> ??? </s:if> ??? <s:else> ????? <td><s:property/></td> ??? </s:else> ?</tr> </s:iterator> </table>

?下個(gè)例子將進(jìn)一步展示status屬性的使用,使用通過OGNL從action類取得的DAO,成員的迭代以及它們的使用(在安全的上下文中),last()方法中指明了當(dāng)當(dāng)前的對(duì)象是迭代器的最后一個(gè)可用的對(duì)象,如果不是,我們需要使用逗號(hào)來分隔用戶,代碼如下:

<s:iterator value="groupDao.groups" status="groupStatus"> ???? <tr 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="users" status="userStatus"> ???????????????? <s:property value="fullName" /><s:if test="!#userStatus.last">,</s:if> ???????????? </s:iterator> ???????? </td> ???? </tr> </s:iterator>

?下一個(gè)例子在一個(gè)action collection上迭代,并且將每一個(gè)迭代的值傳給另一個(gè)action。這里的訣竅在于使用”[0]”。它獲得當(dāng)前的值并且將值傳入edit action。使用”[0]”與使用<s:property/>具有相同的效果(但是,后者,在param標(biāo)簽內(nèi)部不起作用)。代碼如下所示:

<s:action name="entries" id="entries"/> ???? <s:iterator value="#entries.entries" > ???????? <s:property value="name" /> ???????? <s:property /> ???????? <s:push value="..."> ??????????? ?<s:action name="edit" id="edit" > ???????????????? <s:param name="entry" value="[0]" /> ???????????? </s:action> ???????? </push> ???? </s:iterator>

??下例使用iterator標(biāo)簽來模擬一個(gè)簡(jiǎn)單的循環(huán),循環(huán)了5次,代碼如下:

<s:iterator status="stat" value="{1,2,3,4,5}" > ?? <!—獲得當(dāng)前的index(從0開始) --> ?? <s:property value="#stat.index" /> ? ?? <!— 獲得當(dāng)前堆棧的值 --> ?? <!—當(dāng)前的迭代值(0, 1, ... 5) --> ?? <s:property value="top" /> </s:iterator>

5)merge

??描述:它是MergeIterator標(biāo)簽的組件,它的工作是合并迭代器和對(duì)合并后的迭代器的后續(xù)調(diào)用,它將使得每一個(gè)合并的迭代器有機(jī)會(huì)展示它的元素,接著下一個(gè)調(diào)用將會(huì)允許下一個(gè)迭代器來展示它的元素。一旦最后一個(gè)迭代器已展示完它的所有元素,第一個(gè)迭代器又能夠開始展示它的元素(除非元素已經(jīng)用盡)。

?從內(nèi)部來說,任務(wù)將委托給MergeIteratorFilter去做。

?下面展示了3個(gè)列表的合并,其中每個(gè)列表有3個(gè)元素,步驟如下:

1.?展示第一個(gè)列表的第一個(gè)元素;

2.?展示第二個(gè)列表的第一個(gè)元素;

3.?展示第三個(gè)列表的第一個(gè)元素;

4.?展示第一個(gè)列表的第二個(gè)元素;

5.?展示第二個(gè)列表的第二個(gè)元素;

6.?展示第三個(gè)列表的第二個(gè)元素;

7.?展示第一個(gè)列表的第三個(gè)元素;

8.?展示第二個(gè)列表的第三個(gè)元素;

9.?展示第三個(gè)列表的第三個(gè)元素;

?參數(shù):

名稱

必選

默認(rèn)值

求值

類型

描述

id

?

String

合并后的迭代器的值將會(huì)存儲(chǔ)在堆棧上下文的id

?舉例:

?Action類代碼:

public class MergeIteratorTagAction extends ActionSupport { ? private List myList1; private List myList2; private List myList3; ? public List getMyList1() { ???? return myList1; } ? public List getMyList2() { ???? return myList2; } ? public List getMyList3() { ???? return myList3; } ? ? public String execute() throws Exception { ? ???? myList1 = new ArrayList(); ???? myList1.add("1"); ???? myList1.add("2"); ???? myList1.add("3"); ? ???? 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"; } }

?jsp頁代碼:

<s:merge id="myMergedIterator1"> ???? <s:param value="%{myList1}" /> ???? <s:param value="%{myList2}" /> ???? <s:param value="%{myList3}" /> </s:merge> <s:iterator value="%{#myMergedIterator1}"> ???? <s:property /> </s:iterator>

?

二.?????????????UI標(biāo)簽

?

三.?????????????主題與模板標(biāo)簽

?

四.?????????????標(biāo)簽引用

?

五.?????????????Ajax標(biāo)簽

?

六.?????????????標(biāo)簽語法

? 標(biāo)簽被設(shè)計(jì)用來顯示動(dòng)態(tài)的數(shù)據(jù)。為了創(chuàng)建輸入域來顯示屬性“postalCode”,我們需要將“postalCode”傳給textfield標(biāo)簽。

? 下面創(chuàng)建了一個(gè)動(dòng)態(tài)的輸入域:

?<s:textfield name="postalCode"/>

???如果在值棧中存在“postalCode”屬性,它的值將會(huì)被放入該輸入域中。當(dāng)輸入被提交到框架之后,它的值將會(huì)被放置到“postalCode”屬性中。

???有時(shí)候,我們想要傳動(dòng)態(tài)的數(shù)據(jù)到標(biāo)簽中。例如,我們可能需要用輸入域來顯示一個(gè)label,我們可能想要從應(yīng)用程序的message資源中。相應(yīng)地,框架將會(huì)解析在標(biāo)簽屬性中的表達(dá)式。因此在運(yùn)行時(shí)我們能夠合并動(dòng)態(tài)的數(shù)據(jù)到標(biāo)簽的屬性中。表達(dá)式是像“%{…}”這樣的。任何一個(gè)在其中嵌入的文本被作為表達(dá)式來計(jì)算。

???使用一個(gè)表達(dá)式來設(shè)置label的例子:

<s:textfield key="postalCode.label" name="postalCode"/>

???表達(dá)式語言(OGNL)使得我們能夠調(diào)用方法和計(jì)算屬性。getText()方法由ActionSupport(大多數(shù)Action的基類)提供。我們可以調(diào)用任何一個(gè)表達(dá)式提供的方法,包括getText方法。

?非String型的屬性

?? HTTP協(xié)議是基于文本的,但是有一些標(biāo)簽時(shí)非String類型的,例如bool和int。為了能夠直接使用非String型的屬性,本框架將所有的非String類型的屬性作為一個(gè)表達(dá)式處理,在這種情況下,你不需要使用任何轉(zhuǎn)義符(但是,如果你使用了轉(zhuǎn)義符,框架也會(huì)將其跳過)。

???計(jì)算boolean型的例子:

<s:select key="state.label" name="state" multiple="true"/>

???一旦multiple屬性跟一個(gè)boolean屬性對(duì)應(yīng)起來,框架不會(huì)將它作為一個(gè)String來解釋,這個(gè)值將會(huì)被作為一個(gè)表達(dá)式來計(jì)算并且自動(dòng)地將其轉(zhuǎn)換為boolean值。

???因?yàn)楹苋菀淄浤膫€(gè)屬性是String,哪個(gè)屬性是非String型的,你仍然可以使用轉(zhuǎn)義符。

???計(jì)算boolean值(帶有轉(zhuǎn)義符的):

?<s:select key="state.label" name="state" multiple="%{true}"/>

??帶有屬性的:

?<s:select key="state.label" name="state" multiple="allowMultiple"/>

?既帶有轉(zhuǎn)義符又帶有屬性的:

?<s:select key="state.label" name="state" multiple="%{allowMultiple}"/>

?

??值是一個(gè)對(duì)象

???更通常的情況是,屬性值是自動(dòng)放入的,因?yàn)閚ame屬性通常告訴框架哪個(gè)屬性來調(diào)用方法來set值。但是,如果需要直接設(shè)置值,建議那個(gè)值是Object型而不是String型。

???注意:因?yàn)橹凳欠荢tring型的,無論傳入什么,都是將他作為表達(dá)式來處理——而不是一個(gè)字面的String。

?? 可能導(dǎo)致錯(cuò)誤的例子:

?<s:textfield key="state.label" name="state" value="CA"/>

???如果textfield被傳入?“CA”,本框架將會(huì)名字為getCa的屬性。通常情況下,這不是我們的本意,我們想要做的是傳送一個(gè)字符串。在表達(dá)式語言中,文字需要被置為單引號(hào)之間。

???以正確的方式傳入一個(gè)文字值:

<s:textfield key="state.label" name="state" value="%{'CA'}" />

???另一種方法是使用value=”’CA’”,但是在這種情況下,推薦使用表達(dá)式符號(hào)。

???標(biāo)簽屬性使用如下三種規(guī)則計(jì)算:

? 1.????所有的String屬性都被解析成“%{…}”符號(hào);

? 2.????所有的非String屬性沒有被解析,而是直接按照表達(dá)式來算;

? 3.????規(guī)則2的異常情況是非String型的屬性使用轉(zhuǎn)義符號(hào)“{%{}”,符號(hào)被作為多余的符號(hào)被忽略,而只是計(jì)算內(nèi)容。

表示式語言符號(hào)

? 1.在Freemarker、Velocity或者JSTL的表達(dá)式語言的JavaBean對(duì)象的標(biāo)準(zhǔn)文本

<p>Username: ${user.username}</p>

? 2.在值棧中的一個(gè)username屬性

<s:textfield name="username"/>

? 3.?引用值棧中的屬性的另一種方式

<s:url id="es" action="Hello"> ?<s:param name="request_locale"> ??? es ?</s:param> </s:url> <s:a href="%{es}">Espanol</s:a>

? 4.?在Session Context中獲得user對(duì)象的userName屬性

<s:property name="#session.user.username" />

? 5.?在一個(gè)靜態(tài)map中,像("username","trillian")一樣

<s:select label="FooBar" name="foo" list="#{'username':'trillian',?'username':'zaphod'}" />

轉(zhuǎn)載于:https://www.cnblogs.com/huozhicheng/archive/2011/04/22/2533147.html

總結(jié)

以上是生活随笔為你收集整理的使用struts 2 获取服务器数据 ongl表达式 标签的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。