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规范系统

你可能感兴趣的:(Ognl)