struts2学习dem006_OGNL
来源:互联网 发布:nginx使用场景 编辑:程序博客网 时间:2024/06/06 16:17
一、简述OGNL
OGNL 是object-Graph Navigation Language(对象图导航语言) 的缩写,它是一种功能强大的表达式语言(Expression Language),简称EL。
二、OGNL的应用场景
标签中
<s:property value="user.username"/>
配置文件中:
<result type="redirect">/..?username=${username}</result>
三、OGNL的访问包含哪些
1》访问属性
Action零用领域对象接收用户输入信息(见一个实体类ov--User类)
访问属性用户名:<s:property value="user.username"/>
当然User类中可以在声明一个对象oth(那个对象的类名---Other类)
访问other类中的属性name:<s:property value="user.oth.name"/>
当然也可以访问静态属性通过这种方式:<s:property value="@包名@属性名"/>(注:这里属性名不能为私有,并且在Struts.xml中必须配<constantname="struts.ognl.allowStaticMethodAccess" value="true"/>下同)
2》访问方法
~~~1~~~访问action中的普通或静态方法getCom() :<s:property value="getCom()"/>
也可以这样<s:proerty value="@包名@getCom()"/> 或者<s:proerty value="@@getCom()"/>
(注:这里访问的一定是静态方法,并且在Struts.xml中必须配<constantname="struts.ognl.allowStaticMethodAccess" value="true" />)
~~~2~~~~当然也可以访问jdk中的方法:
如:<s:property value="@java.lang.Math@floor(21.04)"/>
~~~3~~~访问构造方法:
<s:property value="new com.along.vo.User('阿龙','123456').username" />
(注:这里阿龙上面的引号一定是单引号‘ ,这句话的意思访问构造方法中的username)
3》访问集合
~~1~~访问List集合<s:property value="list" />
a> 访问List集合中某一个元素<s:property value="list[1]" />
b> 如果不想访问内存地址哈希码的无符号16进值:就重写toString()方法,让其按照自己的方法书写:
如:你要在前台显示
list.add(new User("阿龙","123456","22","男"));
list.add(new User("阿月","123456","23","女"));
这时直接用<s:property value="list" />访问, 出来的是类名@16进制
如果不想就再类中重写toString()方法
public String toString(){
return "学生姓名 = " + username + " 学生年龄 = " + age + " 学生性别 = " + sex;
}
c> 这时前台也可以利用投影技术访问list对象中的某个属性
---如:<s:property value="list.{username}"/>这时获得的是集合中所有的属性username.如果想获得其中第一个username可以通过:<s:property value="list.{username}[0]"/>
d>利用选择获取list对象中的满足条件的取出来
如:取出年龄大于22岁的:<s:property value="list.{?#this.age>22}"/>这里#this指list中所有对象,
若要取出年龄大于22岁的所有username:<s:property value="list.{?#this.age>22}.{username}"/>
可以更进一步取出年龄大于22岁的第一个username:<s:property value="list.{?#this.age>22}.{username}[0]"/>这个返回的是字符串--阿月
也可以这样取年龄大于22岁第一个username::<s:property value="list.{^#this.age>22}.{username}"/>这个返回的是列表---[阿月]
那么这就意味着可以通过:<s:property value="list.{^#this.age>22}.{username}.size"/>判断其里面值是否存在,存在为1,不存在为0
<注:如果不加?号,取出的是判断布尔型,^符号是开始的意思》
~~2~~访问set集合<s:property value="list" />(set集合不容许重复)
访问set集合中某一个元素
(首先Object[] objs = set.toArray();//将set转换成数组
然后根据下表访问objs[1]
也可遍历元素
for(Object o : objs){
System.out.println(o);
}
~~3~~访问map集合<s:property value="map" />
访问map集合中某一个元素<s:property value=" list['m1'] " />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~集合的伪属性~~~~~~~~~~~~~~~~~~~~~~~~~
~~4~~使用lambda表达式
格式:<s:property value=" #f = : [#this==1 ? 1 : 里面所需计算的表达式] ,#f(数值) "/>
如:计算5的阶乘:<s:property value=" #f = :[#this==1?1 : #this*#f(#this-1)], #f(5)"/>
(注:这里的函数设为#f, []中括号里相当于C语言的条件表达式。#this就是指#f(数值)中数值的数5,如果不等于1就在此调用函数#f());
- struts2学习dem006_OGNL
- [Struts2]Struts2学习总结
- Struts2 学习
- Struts2学习
- 学习struts2
- 学习struts2
- 学习struts2
- 学习Struts2
- Struts2学习
- struts2学习
- 学习struts2
- struts2学习
- struts2学习
- struts2学习
- struts2学习
- struts2学习
- Struts2学习
- struts2学习
- (6)-UDP协议
- 有关import sun.audio.AudioPlayer(或者其它文件)的问题
- Java属性克隆的几种方法
- (7)-广播和多播,IGMP协议
- 线程池的计时器
- struts2学习dem006_OGNL
- (8)-DNS域名系统
- The difference between 'typedef' and '#define'
- (9)-TCP协议概述
- 关于分区表的初探
- android 之popupWindow 在指定位置上的显示
- JavaScript入门之一:HTML常用标签、Js基本语法
- (10)-TCP连接的建立与中止
- 多线程免锁