• Struts2-lesson3


    OGNL表达式

    Object Graphic Navigation Language

    对象,图,导航,语言

    OGNL表达式取值范围

    OGNL基本语法

    // 准备ONGLContext
    // 准备Root
    User rootUser = new User("tom", 18);
    // 准备Context
    Map<String, User> context = new HashMap<String, User>();
    context.put("user1", new User("jack", 18));
    context.put("user2", new User("rose", 22));
    OgnlContext oc = new OgnlContext();
    oc.setRoot(rootUser);
    oc.setValues(context);
    // 书写OGNL
    
    // 取出root中user对象的name属性
    String name = (String) Ognl.getValue("name", oc, oc.getRoot());
    Integer age = (Integer) Ognl.getValue("age", oc, oc.getRoot());
    
    // 取出context中键为user1对象的name属性
    String name = (String) Ognl.getValue("#user1.name", oc, oc.getRoot());
    String name2 = (String) Ognl.getValue("#user2.name", oc, oc.getRoot());
    Integer age = (Integer) Ognl.getValue("#user2.age", oc, oc.getRoot());
    
    // 将root中的user对象的name属性赋值
    Ognl.getValue("name='jerry'", oc, oc.getRoot());
    String name = (String) Ognl.getValue("name", oc, oc.getRoot());
    String name2 = (String) Ognl.getValue("#user1.name='郝强勇',#user1.name",oc, oc.getRoot());
    
    // 调用root中user对象的setName方法
    Ognl.getValue("setName('lilei')", oc, oc.getRoot());
    String name = (String) Ognl.getValue("getName()", oc, oc.getRoot());
    String name2 = (String) Ognl.getValue("#user1.setName('lucy'),#user1.getName()", oc, oc.getRoot());
    
    
    // 调用静态方法
    String name = (String) Ognl.getValue("@cn.itheima.a_ognl.HahaUtils@echo('hello 强勇!')", oc,oc.getRoot());
    // Double pi = (Double) Ognl.getValue("@java.lang.Math@PI", oc,
    // oc.getRoot());
    Double pi = (Double) Ognl.getValue("@@PI", oc, oc.getRoot());
    
    // ognl创建对象-list|map
    // 创建list对象
    Integer size = (Integer) Ognl.getValue("{'tom','jerry','jack','rose'}.size()", oc, oc.getRoot());
    String name = (String) Ognl.getValue("{'tom','jerry','jack','rose'}[0]", oc, oc.getRoot());
    String name2 = (String) Ognl.getValue("{'tom','jerry','jack','rose'}.get(1)", oc, oc.getRoot());
    
    /*
     * System.out.println(size); System.out.println(name);
     * System.out.println(name2);
     */
    // 创建Map对象
    Integer size2 = (Integer) Ognl.getValue("#{'name':'tom','age':18}.size()", oc, oc.getRoot());
    String name3 = (String) Ognl.getValue("#{'name':'tom','age':18}['name']", oc, oc.getRoot());
    Integer age = (Integer) Ognl.getValue("#{'name':'tom','age':18}.get('age')", oc, oc.getRoot());

    OGNL与Struts2的结合

    (用List可设计一个栈)

    查看值栈中的两部分内容

    http://localhost:8080/test_struts2/hello/D3Demo1Action.action

    Struts2与ognl结合体现

    参数接收中

    配置文件中

    Struts2标签中

    http://localhost:8080/test_struts2/form.jsp

    http://localhost:8080/test_struts2/hello/D3Demo3Action.action

    击石乃有火,不击元无烟!!
  • 相关阅读:
    redis 事务 lq
    redis集群架构高可用分析 lq
    redis分布式锁 lq
    jvm垃圾回收 lq
    【攻防世界】逆向666
    第六届上海市大学生网络安全大赛wp
    【攻防世界】逆向answer_to_everying
    2021 DJBCTF(大吉大利杯) wp
    渗透靶机bossplayersCTF
    2020首届祥云杯部分wp
  • 原文地址:https://www.cnblogs.com/rain2020/p/12792247.html
Copyright © 2020-2023  润新知