struts2 笔记3

2017-01-06  本文已影响4人  持续进步者

输入校验

validate,validatexxx

OGNL表达式

什么是OGNL语言

OGNL的全称为Object Graphic Navigation Language(对象图导航语言)。它是Struts2的默认表达式语言!
使用OGNL需要导入OGNL的Jar包:ognl-3.0.5.jar

OGNL 的功能介绍

取值语法
public static Object getValue(@NotNull String expression,
                                    Map context,
                                    Object root)
                            throws ognl.OgnlException
从root根 bean 中取值
User u1 = new User();
u1.setUsername("tom");
String username = (String) Ognl.getValue("username", new HashMap(), u1);
System.out.println(username);
----------------
输出:tom
从root根 list 中取值 "[第几个].属性"
ArrayList<User> list = new ArrayList<User>();
User u1 = new User();
u1.setUsername("tom
User u2 = new User();
u2.setUsername("jerry
list.add(u1);
list.add(u2)
String username = (String) Ognl.getValue("[1].username", new HashMap(), list);
System.out.println(username);
----------------
输出:jerry
从root根引用值中取值 “引用属性.属性”
User user = new User();
user.setUsername("user");

Address address = new Address();
address.setCity("北京");

user.setAddress(address);

String city = (String) Ognl.getValue("address.city", new HashMap(), user);

System.out.println("city : " + city);
----------------
输出: city : 北京
从context上下文中取值"#属性名称"
Map<String, Object> context = new HashMap<String, Object>();
context.put("username", "context");
User user = new User();
user.setUsername("user");
//# 表示取值 context
String mapUsername = (String) Ognl.getValue("#username", context, user);
String rootUsername = (String) Ognl.getValue("username", context, user);
System.out.println("mapUsername = " + mapUsername+"\t"+"rootUsername="+rootUsername);
----------------
输出:mapUsername = context    rootUsername=user
给root根属性赋值
User user = new User();
Ognl.getValue("username='tom'", new HashMap(), user);
System.out.println("username : " + user.getUsername());
----------------
输出:username : tom

User user = new User();
Ognl.setValue("username", new HashMap(), user, "jerry");
System.out.println(user.getUsername());
----------------
输出:jerry

User user = new User();
Ognl.getValue("setUsername('jack')", new HashMap(), user);
System.out.println(user.getUsername());
----------------
输出:jack
获取静态值 “@全限定名@静态方法”
String time = (String) Ognl.getValue("@cn.structs.k_orgl.DateUtils@getTime()", new HashMap(), new Object());
System.out.println("time = " + time);
----------------
输出:time = 2016-12-28 14:43:10
数学运算
int result = (int) Ognl.getValue("1+1", new HashMap(), new Object());
System.out.println("result =" + result);
----------------
输出:result =2
创建list对象
List list = (List) Ognl.getValue("{'tom','jerry','jack','rose'}", new HashMap(), new    Object());
System.out.println(list);
----------------
输出:[tom, jerry, jack, rose]
创建map对象
Map map = (Map) Ognl.getValue("#{'name':'tom','age':'18'}",new HashMap(),new Object());
System.out.println(map);
----------------
输出:{name=tom, age=18}

OGNL 与 Struts2 的结合

Struts2中OGNL操作的上下文和根对象

Struts2中的上下文对象就是ActionContext,而根对象是ValueStact对象。但
struts2中根对象ValueStack很特殊,他不是一个对象,而是一组对象(底层是ArrayList的栈结构)。
可以通过ActionContext来获取ValueStack:ActionContext.getContext().getValueStack();
也可以从request中获取ValueStack:request.getAttribute("struts.valueStack").

ActionContext 内部的数据:
ValueStack内部的数据:
上一篇 下一篇

猜你喜欢

热点阅读