1.OGNL通过索引访问ValueStack中的对象。
[0].name
[1].name
上面使用的索引的方式并不是直接取得指定元素,而是从指定索引开始向下搜索。
访问ValueStack里的属性:${bar}
2.OGNL对非根对象属性的访问前要加#号
#foo.blash
Struts2的命名对象,他们与根对象无关,只是存在于Stack Context中,所以访问他们时需要使用#前缀来指明:
parameters对象:#parameters['foo'] 或 #parameters.foo
request对象:#request['foo'] 或 #request.foo
session对象:#session['foo'] 或 #session.foo
application对象
attr对象:按PageContext,request.session.ServletContext的顺序寻找对象
3.OGNL集合操作
生成List集合:{e1,e2,e2 ...}
生成Map集合:#{key1:value1,key2:value2 ...}
in 与 notin:
<s:if text="'foo' in {'foo','bar'}">...</s:if>
<s:if text="'foo' notin {'foo','bar'}">...</s:if>
获取集合子集:
person.relatives.{? #this.gender == 'male'} (问号可以替换为:^,$)
集合后紧跟.{}元素运算符用于取出集合的子集,而#this代表集合里的元素
4.如果为<s:iterator .../>标签指定status属性,即每次迭代时都会有一个IteratorStatus实例,该实例包含以下方法:getCount(),getIndex(),isEven(),isOdd(),isFirst(),isLast()
在OGNL表达式中可以通过 #st.odd, #st.count来访问,st为IteratorStatus的实例
5.使用iterator迭代Map对象:
<s:iterator value="集合对象" status="st">
    <s:property value="key"/><s:property value="value">
</s:iterator>
6.使用append标签将多个集合拼接成一个新集合,然后使用iterator进行迭代
<s:append );
attr 用于按request->session->application顺序访问其属性
11.在action中需要真正使用request,session,application对象是,action要实现ServletRequestAware, SessionAware, ServletContextAware接口

相关文章: