OGNL表达式泛泛学习
#application对象 用于访问ServletContext
例如:#application.userName或者#application['userName'],相当于调用ServletContext的getAttribute("username");
<package name="itcast" namespace="/itcast" extends="struts-default">
<action name="list" class="cn.itcast.action.PersonListAction">
<reslut name="list">/WEB-INF/page/personlist.jsp</result>
</action>
</package>
ognl表达式特点
<s:set var="list" vlaue="{'第一个','第二个','第三个'}"/>
<!-- s:iterator标签在迭代集合时有个特点:会把当前迭代的对象放在值栈的栈顶 -->
<s:iterator value="#list">
<s:property/></br>
</s:iterator>
****************采用OGNL表达式创建List/Map集合对象
<s:set var="maps" vlaue="#{'key1':value,'key2':35,'key3':12}"/>
<!-- s:iterator标签在迭代集合时有个特点:会把当前迭代的对象放在值栈的栈顶 -->
<s:iterator value="#maps">
<s:property value="key"/>=<s:property value="value"/></br>
</s:iterator>
内部的机制
package cn.itcast.action;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args){
Map<String Key,Integer value> maps= new HashMap<String,Integer>();
maps.put("key1",67);
maps.put("key2",78);
maps.put("key3",23);
for(Map.Entry<String,Integer> entry : maps.entrySet())
{
System.out.println(entry.getKey() + "=" + entry.getValue());
}
}
}
************采用OGNL表达式判断对象是否存在于集合中
<s:if test="'foo' in {'foo','bar'}>
在
</s:if>
<s:else>
不在
</s:else>
*****************OGNL表达式的投影功能 不实用
List <Book> books= ...;
List<Book> books=...;
bookid name price
=========================
89 aaa 91
=========================
要求只显示价格大于60的记录
1>要求取价格大于60的记录 books --> 子集合中
ognl : books.{?#this.price>60} 从大集合中筛选满足这个条件的子集合
打?号表示获取符合逻辑的元素
#this代表对大集合进行迭代
#this.price>60
<s:iterator value="books.{?#this.price>60}">取得子集合并迭代
</s:property value="name"/>,价格<s:property value="price"/></br>
完全可以使用Struts标签和EL表达式 jstl/El
ActionContext.put(); request
但是要调用对象的方法就可以使用OGNL表达式
ognl功能强大
个人观点: 能满足应用需要 sun规范系统