java的ognl写文件_JAVA之:OGNL表达式练习
一、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表达式练习相关推荐
- java nio 追加写文件_Java NIO写入文件
用NIO写文件,总结一下,主要有如下步骤: 1.打开通道. 2.包装到缓冲区. 3.写入文件. 4.不忘记关闭通道,关闭流.package what21.nio; import java.io.Fil ...
- java nio 追加写文件_Java NIO在文件末尾追加数据
[java]代码库import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import ja ...
- java c盘写文件_Java将C盘一个文本文件复制到D盘
复制的原理: 其实就是将C盘下的文件数据存储到D盘的一个文件中. 步骤: 1,在D盘创建一个文件.用于存储C盘文件中的数据. 2,定义读取流和C盘文件关联. 3,通过不断的读写完成数据存储. 4,关闭 ...
- java printwriter 文件,java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr...
java使用PrintWriter写文件,javaprintwriter写,下面示例代码演示使用Pr 下面示例代码演示使用PrintWriter方法写文件. PrintWriter的构造函数接受Fil ...
- Java服务端向客户端写文件_java实现客户端向服务器发送文件
本文实例为大家分享了java实现客户端向服务器发送文件的具体代码,供大家参考,具体内容如下 服务器源代码: import java.io.BufferedReader; import java.io. ...
- java在文件尾部写文件_Java在文件尾部追加内容
import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; /** * 将内容追加到 ...
- java在linux创建文件_Java中创建并写文件的5种方式
导读 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. 在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下 ...
- java 打开服务器excel文件_Java中上传excel文件并在服务器端读取存入数据库
传excel文件并在服务器端读取存入数据库 博客分类: struts2 Excel JSP XML 工作 Java代码 页面jsp文件 action处理:publicclassManyContacts ...
- Java中 读-写 文件 BufferedReader BufferedWriter
本篇文章,为大家带来Java中进行文件读写的一种方式. 我的文件目录: /Users/gisboy/Desktop/a.txt Java中,用java.io.BufferedReader 进行文件内容 ...
最新文章
- paxos整合mysql_微信开源PhxSQL:高可用、强一致的MySQL集群(转载)
- java web每天定时执行任务(四步轻松搞定)
- 在 ubuntu 中设置安装 boost 库
- 【OpenCV 例程200篇】42. 图像的灰度变换(比特平面分层)
- yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程
- Linux 进程控制相关函数
- html 转换成 pdf js,JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
- php导出excel例子,php使用原生的方法导出excel实例分享
- 通信原理及系统系列3—— 基于卷积编码的2ASK通信系统设计(非相干解调)
- 小程序input textarea 禁止粘贴实现
- 被static修饰的map、list GC问题
- 建议平面设计爱好者要学的软件,和一些CDR常见问题
- 巧用Excel函数进行数据转置
- input中加入图标实现搜索框
- 【错误记录】Mac 中 Python 报错 ( ERROR: Could not build wheels for numpy which use PEP 517 | 问题未解决 | 问题记录 )
- 可以模拟人工操作的软件;如访问网页,在网页中自动获取固定信息等
- 安卓用户必备的5款良心APP,各个都是精品,低调又实用!
- 职场“老好人”生存法则
- 富文本编辑器 wangeditor、Dialog中使用wangeditor、多次生成wangeditor实例
- 初中生怎么学英语和计算机,初中生如何学习英语口语
热门文章
- 陌上红尘,只影向谁依
- E. Stupid Submissions(思维)
- python标准库math中用来计算平方根的函数是_2020超星尔雅网课透过性别看世界完整满分见面课答案...
- Android 13:一文看懂两大重磅升级
- hadoop组件---数据仓库(四)---hive常用命令
- 1.3 信号处理函数,创建worker进程
- [iPhone-APP]手机归属地查询软件
- 培训笔记——如何将Wizfi2X0的固件升级
- C++控制台模拟 骇客帝国数字飞屏
- 虚拟机服务器关机命令,linux虚拟机怎么关机命令