zoukankan      html  css  js  c++  java
  • 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规范系统

  • 相关阅读:
    POJ 2528 Mayor's posters(线段树)
    Codeforces Beta Round #22 (Div. 2 Only) C. System Administrator(构造割点)
    HDU 4417 Super Mario(划分树)
    Codeforces Beta Round #22 (Div. 2 Only) D. Segments(贪心)
    HDU 1247 Hat’s Words(字典树)
    HDU 3639 HawkandChicken(强连通分量)
    HDU 3394 Railway(点双连通分量)
    HDU 1394 Minimum Inversion Number(树状数组)
    HDU 3874 Necklace(树状数组+离线处理)
    树状数组
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2102441.html
Copyright © 2011-2022 走看看