• Struts2_OGNL


    【1】OGNL:Object Graph Navigation Language 对象图导航语言,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,
    可以存取对象的任意属性,
    调用对象的方法,
    遍历整个对象的结构图,
    实现字段类型转化等功能。
    它使用相同的表达式去存取对象的属性。

    【2】想初始化domain model。可以自己New,也可以传参数值,但这时候需要保持为空的构造方法。

    【3】当使用chain时会在stack中出现两个action.
    <body>
    <ol>
    <li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
    <li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user["age"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
    <li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
    <li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
    <li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
    <li>访问值栈中action的普通方法:<s:property value="m()" /></li>
    <hr />
    <li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
    <li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
    <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
    <hr />
    <li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
    <hr />
    <li>访问List:<s:property value="users"/></li>
    <li>访问List中某个元素:<s:property value="users[1]"/></li>
    <li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
    <li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
    <li>访问Set:<s:property value="dogs"/></li>
    <li>访问Set中某个元素:<s:property value="dogs[1]"/></li>
    <li>访问Map:<s:property value="dogMap"/></li>
    <li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap["dog101"]"/></li>
    <li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
    <li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
    <li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
    <hr />
    <li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>//?#代表过滤
    <li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>//^#代表开头的内容
    <li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>//$#代表结尾的内容
    <li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
    <hr />
    <li>[]:<s:property value="[0].username"/></li>

    </ol>

    <s:debug></s:debug>
    </body>

    【4】list中可以添加任何对象,我可以给你举个例子:
    class Person{
    .....
    }上面定义了一个Person类
    ListPerson p1=new Person();
    Person p2=new Person();
    【List list=new ArrayList();】
    【list.add(p1);】
    【list.add(p2);】//这里是将对象加入到list中
    for(int i=0;i<list.size();i++){//利用循环,将person对象全部一一取出
    Person p=(Person)list.get(i);//注意,这里一定要强制类型转换,因为List中取出的对象都是Object类型

    【5】HashMap:什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。在下文中会有例子具体说明。
    再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
    Map map=new HashMap();
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");
    map.put("d", "ddd");
    在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet。

    【6】E L(Expression Language)
    目的:为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。

  • 相关阅读:
    零基础用Docker部署微服务
    HashMap负载因子为什么是0.75
    一个JavaBean和DTO转换的优秀案例
    golang三方包应该如何安装--在线和离线
    Restful API 设计参考原则
    消息队列 RabbitMQ
    Python中的str与unicode处理方法
    MySQL索引背后的数据结构及算法原理
    Python面试题目--汇总
    How to check Logstash's pulse
  • 原文地址:https://www.cnblogs.com/boyangx/p/4071267.html
Copyright © 2020-2023  润新知