OGNL表达式
自动导航对象的结构并访问和设置对象数据,核心对象是ognl上下文(一个Map容器),可以存放多的对象
特点:
1.支持对象方法的调用
2.支持静态方法的调用
3.支持变量的赋值
4.可以操作集合数据
Struts框架中的OGNL
struts2中ognl作用与struts2中的ActionContext。
接收一个action请求时会创建ActionContext对象并实例化
获取值栈对象:${user.name}
获取application:#application.name或#application.['name'] :相当于调用application.getAttribute("name");
获取request:#request.name或#request.['name']
获取session:#session.name或#session.['name']
获取parameters:#parameters.name或#parameters.['name']
获取attr:不指定范围时按page, request, session, application 次序搜索:#attr.name或#attr.['name']
在使用Struts2标签时需要引用Struts2的标签库,在jsp头部通过<%@ taglib prefix="s" uri="/struts-tags"%>
访问静态方法与属性
调用Bean.NAME静态属性 : @com.lyq.bean.Bean@NAME
调用静态方法: @com.lyq.bean.Bean@greeting()
默认情况下struts2不允许ognl 调用静态方法。需要在struts.xml中更该:<constant name="struts.ognl,allowStaticMethodAccess" value="true">
访问List,Set,Map集合
List集合:list[0]\
Set集合:无序集合不能通过下标值方式访问
Map集合:map.key或map.['key'] 访问所有的key:map.keys
判断元素是否为空:collection.isEmpty() collection.size
投影和选择
投影:获取集合中某列的所有数据 值栈中: list.{数据} 非值栈:#list.name
选择:获取集合中满足条件的选择操作:值栈:list.{?#this.age>10} 非值栈:#list.{?#this.age>10}\
?:获取满足指定条件的所有元素
^:获取满足指定条件的第一个元素
$:获取指定条件的最后一个元素
Struts2标签库
1.数据标签
1.property:获取数据值并将数据直接输出到页面中
2.set:定义百年灵并赋值及设置变量的作用域
scrope:设置变量作用域(application,request,session,page,action(默认))
value:变量的值
var:变量名称
<s:set var="username" value="测试set标签" scrope="request”></s:set>
<s:property default="没有数据" value="#request.username"/>
3.a:构建超链接
4.param:对参数赋值
5.action:执行action请求并选择返回结果输出到当前jsp页面中
6.push:将对象或值压到值栈中并放置到顶部 <s:push value="#request.student"/>
7.date:格式化日期时间
8.include:包含一个页面:<%@ include file="一个jsp页面或者servlet"%>
9.url标签:
2.控制标签
1.if:<s:if> <s:elseif> <s:else>
2.iterator:用于迭代数据 begin:起始位置 end结束位置 status迭代状态 step每次迭代增加量 value:集合或数组对象 var迭代元素变量,指定后迭代的变量将压入到值栈中
元素数:st.count 是否为第一个元素 st.first 是否为最后一个元素: st.last 当前索引值:st.index 索引值是否为偶数:st.even 索引值是否为奇数:st.odd
拦截器
拦截器可以动态增强action对象的功能,动态的作用于Action和Result之间,动态的为action和result添加新功能
拦截器对Action对象进行拦截操作的顺序图:
使用拦截器
直接使用AbstractInterceptor对象实现Interceptory接口
数据验证机制
手动验证:ActionSupport对Validateable接口进行了实现,但对validate()方法是一个空实现,通过validate()方法验证数据有效性时直接重写validate()
验证文件命名规则:名称必须是ActoinName-validation.xml或ActionName-AliasName-validation.xml ActoinName 是Action对象的名称 AliasNameAction配置的名称
以ActoinName-validation.xml命名数据的验证会作用到整个Action对象中,并验证Action对象的请求业务处理方法,适用于action对象处理方法单一或验证处理规则相同\
以ActionName-AliasName-validation.xml命名适用于多个请求处理方法