struts2框架学习笔记5:OGNL表达式
2018-06-18 03:14:55来源:未知 阅读 ()
OGNL取值范围分两部分,root、Context两部分
可以放置任何对象作为ROOT,CONTEXT中必须是Map键值对
示例:
准备工作:
public void fun1() throws Exception { // 准备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(); // 将rootUser作为root部分 oc.setRoot(rootUser); // 将context这个Map作为Context部分 oc.setValues(context); // 书写OGNL Ognl.getValue("", oc, oc.getRoot()); //在""中书写OGNL表达式即可 }
User类:
package bean; public class User { private String name; private Integer age; public User() { super(); // TODO Auto-generated constructor stub } public User(String name, Integer age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
语法:
从root中取出对象:
// 取出root中user对象的name属性 String name = (String) Ognl.getValue("name", oc, oc.getRoot()); Integer age = (Integer) Ognl.getValue("age", oc, oc.getRoot());
从Context中取出对象:
// 取出context中键为user1对象的name属性 String name1 = (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());
给context赋值:
String name2 = (String) Ognl.getValue("#user1.name='张三'", oc, oc.getRoot());
调用对象的方法:
// 调用root中user对象的setName方法 Ognl.getValue("setName('张三')", oc, oc.getRoot()); String name1 = (String) Ognl.getValue("getName()", oc, oc.getRoot()); String name2 = (String) Ognl.getValue("#user1.setName('lucy'),#user1.getName()", oc, oc.getRoot());
(注意:可以将两条语句写在一起,逗号分隔,返回值是最后一个语句)
调用静态方法:
Double pi = (Double) Ognl.getValue("@java.lang.Math@PI", oc,oc.getRoot());
创建对象:
// 创建list对象 Integer size = (Integer) Ognl.getValue("{'tom','jerry','jack','rose'}.size()", oc, oc.getRoot()); String name1 = (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()); // 创建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结合原理:
OGNLContext本质上就是Struts2中的值栈(ValueStack)
ValueStack中有两部分:ROOT、CONTEXT
(队列:先进先出、栈:先进后出)
ROOT部分是一个栈,CONTEXT部分是ActionContext
ROOT中的这个栈本质是一个容器(集合)
例如用list集合制作栈结构容器:push压栈方法 list.add(0,a);、pop弹栈方法 list.remove(0),就可以模拟一个栈
Struts2中有一个类:CompoundRoot类就是一个栈,实现原理和上面类似
用栈的原因:在取栈中的属性时候,会从栈顶开始找属性,找不到继续向下找,找到停止
默认情况下栈中放置的是当前访问的Action对象。
OGNL表达式和Struts2结合的体现:
Struts2有一个拦截器params,作用是将获得的参数交给OGNL处理
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java--反射(框架设计的灵魂)案例 2020-06-11
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- Java--反射(框架设计的灵魂) 2020-06-11
- java学习之第一天 2020-06-11
- Java学习之第二天 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash