访问属性
名字属性获取
:<s:property value="user.username"/><br>
地址属性获取
:<s:property value="user.address.addr"/><br>
|
访问方法
调用值栈中对象的普通方法:
<s:property value="user.get()"/><br>
|
访问静态属性和方法
调用
Action
中的静态方法:
<s:property value="@struts.action.LoginAction@get()"/>
调用
JDK
中的类的静态方法:
<s:property value="@java.lang.Math@floor(44.56)"/><br>
调用
JDK
中的类的静态方法
(
同上
)
:
<s:property value="@@floor(44.56)"/><br>
调用
JDK
中的类的静态方法:
<s:property value="@java.util.Calendar@getInstance()"/><br>
调用普通类中的静态属性:
<s:property value="@struts.vo.Address@TIPS"/><br>
|
访问构造方法
调用普通类的构造方法
:<s:property value="new struts.vo.Student('
王老吉
' , '
爱国饮料
' , 3 , 99).username"/>
|
1.5.
访问数组
获取
List:<s:property value="testList"/><br>
获取
List
中的某一个元素
(
可以使用类似于数组中的下标获取
List
中的内容
):
<s:property value="testList[0]"/><br>
获取
Set:<s:property value="testSet"/><br>
获取
Set
中的某一个元素
(Set
由于没有顺序,所以不能使用下标获取数据
):
<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
中的某一个元素
(
可以使用类似于数组中的下标获取
List
中的内容
):
<s:property value="testMap['m1']"/><br>
获取
List
的大小
:<s:property value="testSet.size"/><br>
|
访问集合
–
投影、选择
(? ^ $)
利用选择获取
List
中成绩及格的对象
:<s:property value="stus.{?#this.grade>=60}"/><br>
利用选择获取
List
中成绩及格的对象的
username:
<s:property value="stus.{?#this.grade>=60}.{username}"/><br>
利用选择获取
List
中成绩及格的第一个对象的
username:
<s:property value="stus.{?#this.grade>=60}.{username}[0]"/><br>
利用选择获取
List
中成绩及格的第一个对象的
username:
<s:property value="stus.{^#this.grade>=60}.{username}"/><br>
利用选择获取
List
中成绩及格的最后一个对象的
username:
<s:property value="stus.{$#this.grade>=60}.{username}"/><br>
利用选择获取
List
中成绩及格的第一个对象然后求大小
:
<s:property value="stus.{^#this.grade>=600}.{username}.size"/><br>
|
集合的伪属性
OGNL
能够引用集合的一些特殊的属性
,
这些属性并不是
JavaBeans
模式
,
例如
size(),length()
等等
.
当表达式引用这些属性时
,OGNL
会调用相应的方法
,
这就是伪属性
.
集合
|
伪属性
|
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
表达式计算阶乘
:
<s:property value="#f = :[#this==1?1:#this*#f(#this-1)] , #f(4)"/><br>
|
OGNL
中
#
的使用
#
可以取出堆栈上下文中的存放的对象
.
名称
|
作用
|
例子
|
parameters
|
包含当前
HTTP
请求参数的
Map
|
#parameters.id[0]
作用相当于
request.getParameter("id")
|
request
|
包含当前
HttpServletRequest
的属性(
attribute)
的
Map
|
#request.userName
相当于
request.getAttribute("userName")
|
session
|
包含当前
HttpSession
的属性(
attribute
)的
Map
|
#session.userName
相当于
session.getAttribute("userName")
|
application
|
包含当前应用的
ServletContext
的属性(
attribute
)的
Map
|
#application.userName
相当于
application.getAttribute("userName")
|
attr
|
用于按
request > session > application
顺序访问其属性(
attribute
)
|
|
获取
Paraments
对象的属性:
<s:property value="#parameters.username"/>
OGNL
中
%
的使用
用
%{}
可以取出存在值堆栈中的
Action
对象
,
直接调用它的方法
.
例如你的
Action
如果继承了
ActionSupport .
那么在页面标签中,用
%{getText('key')}
的方式可以拿出国际化信息
.
OGNL
中
$
的使用
“
$
”有两个主要的用途
l
用于在国际化资源文件中,引用
OGNL
表达式
l
在
Struts 2
配置文件中,引用
OGNL
表达式
值栈
ValueStack
对象。这个对象贯穿整个
Action
的生命周期(每个
Action
类的对象实例会拥有一个
ValueStack
对象)。当
Struts 2
接收到一个
.action
的请求后,会先建立
Action
类的对象实例,但并不会调用
Action
方法,而是先将
Action
类的相应属性放到
ValueStack
对象的顶层节点(
ValueStack
对象相当于一个栈)。
在
Action
中获得
ValueStack
对象:
ActionContext.getContext().getValueStack()
l
Top
语法
使用
Top
获取值栈中的第二个对象
:<s:property value="[1].top.
对象
"/>
l
N
语法
使用
N
获取值栈中的第二个对象
:<s:property value="[1].
对象
"/>
l
@
语法
调用
action
中的静态方法:
<s:property value="@vs1@
静态方法
"/> vs
:值栈
1
:表示第一个。