訪問屬性
名字屬性獲取
:<s:property value="user.username"/><br>
地址屬性獲取
:<s:property value="user.address.addr"/><br>
|
訪問方法
調(diào)用值棧中對(duì)象的普通方法:
<s:property value="user.get()"/><br>
|
訪問靜態(tài)屬性和方法
調(diào)用
Action
中的靜態(tài)方法:
<s:property value="@struts.action.LoginAction@get()"/>
調(diào)用
JDK
中的類的靜態(tài)方法:
<s:property value="@java.lang.Math@floor(44.56)"/><br>
調(diào)用
JDK
中的類的靜態(tài)方法
(
同上
)
:
<s:property value="@@floor(44.56)"/><br>
調(diào)用
JDK
中的類的靜態(tài)方法:
<s:property value="@java.util.Calendar@getInstance()"/><br>
調(diào)用普通類中的靜態(tài)屬性:
<s:property value="@struts.vo.Address@TIPS"/><br>
|
訪問構(gòu)造方法
調(diào)用普通類的構(gòu)造方法
:<s:property value="new struts.vo.Student('
王老吉
' , '
愛國飲料
' , 3 , 99).username"/>
?
|
1.5.
訪問數(shù)組
獲取
List:<s:property value="testList"/><br>
獲取
List
中的某一個(gè)元素
(
可以使用類似于數(shù)組中的下標(biāo)獲取
List
中的內(nèi)容
):
<s:property value="testList[0]"/><br>
獲取
Set:<s:property value="testSet"/><br>
獲取
Set
中的某一個(gè)元素
(Set
由于沒有順序,所以不能使用下標(biāo)獲取數(shù)據(jù)
):
<s:property value="testSet[0]"/><br>
×
獲取
Map:<s:property value="testMap"/><br>
獲取
Map
中所有的鍵
:<s:property value="testMap.keys"/><br>
獲取
Map
中所有的值
:<s:property value="testMap.values"/><br>
獲取
Map
中的某一個(gè)元素
(
可以使用類似于數(shù)組中的下標(biāo)獲取
List
中的內(nèi)容
):
<s:property value="testMap['m1']"/><br>
獲取
List
的大小
:<s:property value="testSet.size"/><br>
|
?
訪問集合
–
投影、選擇
(? ^ $)
利用選擇獲取
List
中成績(jī)及格的對(duì)象
:<s:property value="stus.{?#this.grade>=60}"/><br>
利用選擇獲取
List
中成績(jī)及格的對(duì)象的
username:
<s:property value="stus.{?#this.grade>=60}.{username}"/><br>
利用選擇獲取
List
中成績(jī)及格的第一個(gè)對(duì)象的
username:
<s:property value="stus.{?#this.grade>=60}.{username}[0]"/><br>
利用選擇獲取
List
中成績(jī)及格的第一個(gè)對(duì)象的
username:
<s:property value="stus.{^#this.grade>=60}.{username}"/><br>
利用選擇獲取
List
中成績(jī)及格的最后一個(gè)對(duì)象的
username:
<s:property value="stus.{$#this.grade>=60}.{username}"/><br>
利用選擇獲取
List
中成績(jī)及格的第一個(gè)對(duì)象然后求大小
:
<s:property value="stus.{^#this.grade>=600}.{username}.size"/><br>
|
集合的偽屬性
OGNL
能夠引用集合的一些特殊的屬性
,
這些屬性并不是
JavaBeans
模式
,
例如
size(),length()
等等
.
當(dāng)表達(dá)式引用這些屬性時(shí)
,OGNL
會(huì)調(diào)用相應(yīng)的方法
,
這就是偽屬性
.
集合
|
偽屬性
|
Collection(inherited by Map, List & Set)
|
size ,isEmpty
|
List
|
iterator
|
Map
|
keys , values
|
Set
|
iterator
|
Iterator
|
next , hasNext
|
Enumeration
|
next , hasNext , nextElement , hasMoreElements
|
?
?
Lambda?? :[…]
格式:
:[…]
使用
Lambda
表達(dá)式計(jì)算階乘
:
<s:property value="#f = :[#this==1?1:#this*#f(#this-1)] , #f(4)"/><br>
|
OGNL
中
#
的使用
#
可以取出堆棧上下文中的存放的對(duì)象
.
名稱
|
作用
|
例子
|
parameters
|
包含當(dāng)前
HTTP
請(qǐng)求參數(shù)的
Map
|
#parameters.id[0]
作用相當(dāng)于
request.getParameter("id")
|
request
|
包含當(dāng)前
HttpServletRequest
的屬性(
attribute)
的
Map
|
#request.userName
相當(dāng)于
request.getAttribute("userName")
|
session
|
包含當(dāng)前
HttpSession
的屬性(
attribute
)的
Map
|
#session.userName
相當(dāng)于
session.getAttribute("userName")
|
application
|
包含當(dāng)前應(yīng)用的
ServletContext
的屬性(
attribute
)的
Map
|
#application.userName
相當(dāng)于
application.getAttribute("userName")
|
attr
|
用于按
request > session > application
順序訪問其屬性(
attribute
)
|
?
|
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
獲取
Paraments
對(duì)象的屬性:
<s:property value="#parameters.username"/>
OGNL
中
%
的使用
用
%{}
可以取出存在值堆棧中的
Action
對(duì)象
,
直接調(diào)用它的方法
.
例如你的
Action
如果繼承了
ActionSupport .
那么在頁面標(biāo)簽中,用
%{getText('key')}
的方式可以拿出國際化信息
.
?
OGNL
中
$
的使用
“
$
”有兩個(gè)主要的用途
l
????????
用于在國際化資源文件中,引用
OGNL
表達(dá)式
l
????????
在
Struts 2
配置文件中,引用
OGNL
表達(dá)式
?
值棧
ValueStack
對(duì)象。這個(gè)對(duì)象貫穿整個(gè)
Action
的生命周期(每個(gè)
Action
類的對(duì)象實(shí)例會(huì)擁有一個(gè)
ValueStack
對(duì)象)。當(dāng)
Struts 2
接收到一個(gè)
.action
的請(qǐng)求后,會(huì)先建立
Action
類的對(duì)象實(shí)例,但并不會(huì)調(diào)用
Action
方法,而是先將
Action
類的相應(yīng)屬性放到
ValueStack
對(duì)象的頂層節(jié)點(diǎn)(
ValueStack
對(duì)象相當(dāng)于一個(gè)棧)。
在
Action
中獲得
ValueStack
對(duì)象:
ActionContext.getContext().getValueStack()
l
????????
Top
語法
使用
Top
獲取值棧中的第二個(gè)對(duì)象
:<s:property value="[1].top.
對(duì)象
"/>
l
????????
N
語法
使用
N
獲取值棧中的第二個(gè)對(duì)象
:<s:property value="[1].
對(duì)象
"/>
l
????????
@
語法
調(diào)用
action
中的靜態(tài)方法:
<s:property value="@vs1@
靜態(tài)方法
"/> vs
:值棧
1
:表示第一個(gè)。