一、OGNL表达式

1.简介

OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航。

OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能。

2.使用OGNL准备工作

2.1导包

struts2 的包中已经包含了.所以不需要导入额外的jar包

2.2代码准备

@Test//准备工作public void fun1() throws Exception{//准备OGNLContext//准备RootUser rootUser = new User("tom",18);//准备ContextMap context = new HashMap();

context.put("user1", new User("jack",18));

context.put("user2", new User("rose",22));

OgnlContext oc = new OgnlContext();//将rootUser作为root部分 oc.setRoot(rootUser);//将context这个Map作为Context部分 oc.setValues(context);//书写OGNLOgnl.getValue("", oc, oc.getRoot());

}准备工作

3.基本语法演示

//取出root中user对象的name属性String name = (String) Ognl.getValue("name", oc, oc.getRoot());

Integer age = (Integer) Ognl.getValue("age", oc, oc.getRoot());

System.out.println(name);

System.out.println(age);取出root中的属性值

//取出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());

System.out.println(name);

System.out.println(name2);

System.out.println(age);取出context中的属性值

//将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());

System.out.println(name);

System.out.println(name2);为属性赋值

//调用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());

System.out.println(name);

System.out.println(name2);调用方法

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());

System.out.println(name);

System.out.println(pi);调用静态方法

//创建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());

System.out.println(size2);

System.out.println(name3);

System.out.println(age);ognl创建对象-list|map

二、OGNL与Struts2的结合

1.结合原理

ValueStack中的两部分

2.栈原理

栈是由ArrayList模拟的

栈中的两个方法的实现

访问栈中属性的特点.由上到下

3.查看值栈中两部分内容(使用DEBUG标签)

3.1Root

默认情况下,栈中放置当前访问的Action对象

3.2Context

Context部分就是ActionContext数据中心

4.struts2与ognl结合体现

4.1参数接收

如何获得值栈对象,值栈对象与ActionContext对象是互相引用的

//压入栈顶//1获得值栈ValueStack vs = ActionContext.getContext().getValueStack();//2将u压入栈顶vs.push(u);

4.2配置文件中

Demo1Action/${name}语法:${ognl表达式}

5.扩展:request对象的getAttribute方法

查找顺序:

三、练习:客户列表

public String list() throws Exception {//1 接受参数String cust_name = ServletActionContext.getRequest().getParameter("cust_name");//2 创建离线查询对象DetachedCriteria dc =DetachedCriteria.forClass(Customer.class);//3 判断参数拼装条件if(StringUtils.isNotBlank(cust_name)){

dc.add(Restrictions.like("cust_name", "%"+cust_name+"%"));

}//4 调用Service将离线对象传递List list = cs.getAll(dc);//5 将返回的list放入request域.转发到list.jsp显示 //ServletActionContext.getRequest().setAttribute("list", list);// 放到ActionContextActionContext.getContext().put("list", list); return "list";

}Action代码(新增ActionContext存放数据)

style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">

修改

删除

style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">

修改

删除

--%>JSP显示数据的代码(注释的是另一种方法)

注意: 每次都会把cust存在ActionContext中

java的ognl写文件_JAVA之:OGNL表达式练习相关推荐

  1. java nio 追加写文件_Java NIO写入文件

    用NIO写文件,总结一下,主要有如下步骤: 1.打开通道. 2.包装到缓冲区. 3.写入文件. 4.不忘记关闭通道,关闭流.package what21.nio; import java.io.Fil ...

  2. java nio 追加写文件_Java NIO在文件末尾追加数据

    [java]代码库import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import ja ...

  3. java c盘写文件_Java将C盘一个文本文件复制到D盘

    复制的原理: 其实就是将C盘下的文件数据存储到D盘的一个文件中. 步骤: 1,在D盘创建一个文件.用于存储C盘文件中的数据. 2,定义读取流和C盘文件关联. 3,通过不断的读写完成数据存储. 4,关闭 ...

  4. java printwriter 文件,java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr...

    java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr 下面示例代码演示使用PrintWriter方法写文件. PrintWriter的构造函数接受Fil ...

  5. Java服务端向客户端写文件_java实现客户端向服务器发送文件

    本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io. ...

  6. java在文件尾部写文件_Java在文件尾部追加内容

    import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; /** * 将内容追加到 ...

  7. java在linux创建文件_Java中创建并写文件的5种方式

    导读 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下 ...

  8. java 打开服务器excel文件_Java中上传excel文件并在服务器端读取存入数据库

    传excel文件并在服务器端读取存入数据库 博客分类: struts2 Excel JSP XML 工作 Java代码 页面jsp文件 action处理:publicclassManyContacts ...

  9. Java中 读-写 文件 BufferedReader BufferedWriter

    本篇文章,为大家带来Java中进行文件读写的一种方式. 我的文件目录: /Users/gisboy/Desktop/a.txt Java中,用java.io.BufferedReader 进行文件内容 ...

最新文章

  1. paxos整合mysql_微信开源PhxSQL:高可用、强一致的MySQL集群(转载)
  2. java web每天定时执行任务(四步轻松搞定)
  3. 在 ubuntu 中设置安装 boost 库
  4. 【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层)
  5. yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程
  6. Linux 进程控制相关函数
  7. html 转换成 pdf js,JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
  8. php导出excel例子,php使用原生的方法导出excel实例分享
  9. 通信原理及系统系列3—— 基于卷积编码的2ASK通信系统设计(非相干解调)
  10. 小程序input textarea 禁止粘贴实现
  11. 被static修饰的map、list GC问题
  12. 建议平面设计爱好者要学的软件,和一些CDR常见问题
  13. 巧用Excel函数进行数据转置
  14. input中加入图标实现搜索框
  15. 【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )
  16. 可以模拟人工操作的软件;如访问网页,在网页中自动获取固定信息等
  17. 安卓用户必备的5款良心APP,各个都是精品,低调又实用!
  18. 职场“老好人”生存法则
  19. 富文本编辑器 wangeditor、Dialog中使用wangeditor、多次生成wangeditor实例
  20. 初中生怎么学英语和计算机,初中生如何学习英语口语

热门文章

  1. 陌上红尘,只影向谁依
  2. E. Stupid Submissions(思维)
  3. python标准库math中用来计算平方根的函数是_2020超星尔雅网课透过性别看世界完整满分见面课答案...
  4. Android 13:一文看懂两大重磅升级
  5. hadoop组件---数据仓库(四)---hive常用命令
  6. 1.3 信号处理函数,创建worker进程
  7. [iPhone-APP]手机归属地查询软件
  8. 培训笔记——如何将Wizfi2X0的固件升级
  9. C++控制台模拟 骇客帝国数字飞屏
  10. 虚拟机服务器关机命令,linux虚拟机怎么关机命令