国庆整理:struts - OGNL的东东:
(国庆死宅,最后才想起要弄点什么,就来发几篇博客Σ( ° △ °|||)︴)
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的
表达式
去存取对象的属性。
简单的语法:
1、基于跟对象表达式:任何一个对像可以作为跟对象
可以访问跟对想的所有属性,可以调用跟对象 的所有方法。
2、基于上下文表达式
上下文=Context
Map集合
访问上下文中值:#key 例子:
@Testpublic void test4() throws Exception{
User user =new User();
user.setUn("bjsxt");
user.setPwd("123456");
user.setDate(new Date());
Map<String, Object> context =new HashMap<String, Object>();
context.put("abc", "bjsxt");
context.put("efg", 90);
context.put("u", user);
Ognl.getValue("@System@out.println(#u.pwd)", context,new Object());
}
创建对象:一些的列表,map 数组的 创建
@Test
public void test6()throws Exception{
//创建一个普通javabean对象 ,使用ognl表达式调用构造方法
User user =(User) Ognl.getValue("new com.bjsxt.ognl.User()", new Object());
System.out.println(user);
//创建一个数组,int[]
int[] ids =(int[]) Ognl.getValue("new int[]{1,2,3}", new Object());
//创建一个List集合{}
List ids3 =(List) Ognl.getValue("{1,2,4}", new Object());
//创建一个Map集合 ,#{}
Map<String,Integer> map =(Map<String, Integer>) Ognl.getValue("#{'a':1,'b':2}", new Object());
System.out.println(map.size());
Map<String, Object> context =new HashMap<String, Object>();
context.put("m", map);
// Ognl.getValue("@System@out.println(#m.get('b'))", context,new Object());
Ognl.getValue("@System@out.println(#m['b'])", context,new Object());
}
ognl在struts2中使用
1、跟对象是固定
跟对象是个:栈,每次只能有一个元素从栈拿出。并且一定是最顶部:最后进入栈的元素。
栈中的最后进入的元素就可以理解为跟对象。
当前访问的Action对象最后进入的栈的。(一般情况下Action对象就跟对象)
2、上下文是固定。
ActoinContext就是上下文
ActoinContext在请求进入的时候就已经初始化。---相当于一个map
key = value
request =HttpServletRequest
session =HttpSession
attr=
param=
3、ognl表达式在jsp中使用时,只能写在struts2的标签里面
这是上课讲的东东
例子:
action:
ActionContext.getContext().put("msg", "今天讲了OGNL");
System.out.println(id);
System.out.println(str);
return "su";
success 。jsp:
<%@taglib prefix="s" uri="/struts-tags" %>
<body>
<h2>登录成功</h2>
<h4><s:property value="str"/> </h4> <!-- s:property 执行ognl表达式 -->
<h5><s:property value="id"/> </h5>
<h5><s:property value="#msg"/></h5>
<h6><s:property value="#request['abc']"/> </h6>
<h6><s:property value="#attr['abc']"/> </h6>
</body>
The framework sets the OGNL context to be our ActionContext, and the value stack to be the OGNL root object. (The value stack is a set of several objects, but to OGNL it appears to be a single object.) Along with the value stack, the framework places other objects in the ActionContext, including Maps representing the application, session, and request contexts. These objects coexist in the ActionContext, alongside the value stack (our OGNL root).
翻译:
框架集OGNL语境是我们的ActionContext,和值栈是OGNL根对象。
(该值栈是一组多个对象,但OGNL似乎是一个单一的对象。)随着值栈,在其他地方的ActionContext框架对象,包括地图的应用,会话,并请求上下文。
在
ActionContext
这些对象
并存,
在
值栈
(
我们
OGNL
根)
。
这些是在context map 中默认放入的 东东,可以直接使用的;