// 参数1,填写Ognl表达式
// 参数2,Map类=》context上下文
// 参数3,JavaBean,Map,List````等类型,Root 根
Ognl需要的jar包:
先准备两个JavaBean
public classUser {privateString name;private intage;privateAddress address;publicAddress getAddress() {returnaddress;
}public voidsetAddress(Address address) {this.address =address;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
}
User
public classAddress {privateString city;publicString getCity() {returncity;
}public voidsetCity(String city) {this.city =city;
}
}
Address
下面列举Demo,方法中使用Ognl
public void func1() throwsOgnlException {
User user= newUser();
user.setName("Tom");
String name= (String) Ognl.getValue("name", newHashMap(), user);
System.out.println(name);
}
从JavaBean根中取数据
//从List根中取数据
public void func2() throwsOgnlException {
List list=new ArrayList();
User user= newUser();
user.setName("Tom");
list.add(user);
User user2=newUser();
user2.setName("Jerry");
list.add(user2);//[1]代表list中第二个数据
String name = (String) Ognl.getValue("[1].name", newHashMap(), list);
System.out.println(name);
}
从List根中取数据
//稍复杂的从JavaBean中取数据
public void func4() throwsOgnlException{
User user=newUser();
Address address=newAddress();
address.setCity("北京");
user.setAddress(address);
String city=(String) Ognl.getValue("address.city", newHashMap(),user);
System.out.println(city);
}
稍复杂的从JavaBean中取数据
//从第二个参数Map中取数据
public void func3() throwsOgnlException{
Map context=new HashMap();
context.put("name", "Tom");//为了验证确实是取自Map中,添加一个JavaBean
User user=newUser();
user.setName("Jerry");//如果取自Map,则需要在name前加#,否则默认取自第三个JavaBean中
String name = (String) Ognl.getValue("#name",context, user);
System.out.println(name);
}
从第二个参数Map中取数据
//用Ognl表达式用getValue方法给对象赋值
public void func5() throwsOgnlException {
User user= newUser();
Integer age= (Integer) Ognl.getValue("age=23", newHashMap(), user);
System.out.println(user.getAge());
System.out.println(age);
}
用Ognl表达式用getValue方法给对象赋值
//用Ognl表达式用setValue方法给对象赋值
public void func6() throwsOgnlException {
User user= newUser();
Ognl.setValue("age", new HashMap(), user,23);
System.out.println(user.getAge());
}
用Ognl表达式用setValue方法给对象赋值
在User类中新增一个非静态方法和一个静态方法
public staticString getNowTime1(){return new SimpleDateFormat("yyyy/MM/dd").format(newDate());
}publicString getNowTime2(){return new SimpleDateFormat("yyyy-MM-dd").format(newDate());
}
User新增方法
//调用根中方法
public void func7() throwsOgnlException {//静态方法和普通方法调用方式一样
User user = newUser();
String nowTime1= (String) Ognl.getValue("getNowTime1()", new HashMap<>(), user);
String nowTime2= (String) Ognl.getValue("getNowTime2()", new HashMap<>(), user);
System.out.println(nowTime1);
System.out.println(nowTime2);
}
调用根中方法
为了测试调用其他类中方法,新增一个类
importjava.text.SimpleDateFormat;importjava.util.Date;public classDateUtils {public staticString getNowTime1(String format) {return new SimpleDateFormat(format).format(newDate());
}publicString getNowTime2(String format) {return new SimpleDateFormat(format).format(newDate());
}
}
获取时间
//调用其他类静态方法并传参数
public void func8() throwsOgnlException {//使用@符号调用其他类中静态方法,不再受必须在根中的限制
User user = newUser();
String nowTime= (String) Ognl.getValue("@cn.hjp.utils.DateUtils@getNowTime1('yyyy-MM/dd')", new HashMap<>(),
user);
System.out.println(nowTime);
}
调用其他类静态方法并传参数
在DateUtils类中新增一公共变量 public static Double d=12.34;进行下面测试
//调用其他类中静态变量
public void func9() throwsOgnlException{
User user=newUser();
Double d=(Double) Ognl.getValue("@cn.hjp.utils.DateUtils@d", new HashMap<>(),
user);
System.out.println(d);
}
调用其他类中静态变量
//进行运算
public void func10() throwsOgnlException{
User user=newUser();
Integer d=(Integer) Ognl.getValue("1+1", new HashMap<>(),
user);
System.out.println(d);
}
进行运算
//逗号“,”连接符的使用
public void func11() throwsOgnlException {
User user= newUser();//多表达式,逗号分隔,都参与运算,只是最后一个才会返回结果
String name = (String) Ognl.getValue("name='Tom',name", new HashMap<>(), user);
Integer age= (Integer) Ognl.getValue("name='Tom',age=23", new HashMap<>(), user);
System.out.println(name);
System.out.println(age);
}
逗号“,”连接符的使用
//创建List集合
public void func12() throwsOgnlException {
User user= newUser();
List list= (List) Ognl.getValue("{'Tom','Lily','Jerry','Jack'}", new HashMap<>(), user);
System.out.println(list);
}
创建List集合
//创建Map,要使用#符号,指定为Map类型
public void func13() throwsOgnlException {
User user= newUser();
Map map= (Map) Ognl.getValue("#{'name':'Tom','age':23}", new HashMap<>(), user);
System.out.println(map);
}
创建Map,要使用#符号,指定为Map类型
方便演示创建对象,重写User类的ToString方法:
public String toString() {
return "User [name=" + name + ", age=" + age + ", address=" + address + "]";
}
//使用Ognl创建对象
public void func14() throwsOgnlException {
User user1=newUser();
User user2= (User) Ognl.getValue("new cn.hjp.bean.User()",new HashMap<>(), user1);
System.out.println(user2);
}
使用Ognl创建对象
//Ognl中的in和 not in 运算符
public void func15() throwsOgnlException{
User user=newUser();
Boolean exists=(Boolean) Ognl.getValue("'Tom' in {'Tom','Lily','Jerry','Jack'}", new HashMap<>(),
user);
Boolean notexists=(Boolean) Ognl.getValue("'Tom' not in {'Tom','Lily','Jerry','Jack'}", new HashMap<>(),
user);
System.out.println(exists);
System.out.println(notexists);
}
Ognl中的in和 not in 运算符
//集合投影
public void func16() throwsOgnlException {
List list = new ArrayList();
User user1= newUser();
user1.setName("Tom");
user1.setAge(23);
list.add(user1);
User user2= newUser();
user2.setName("Jerry");
user2.setAge(24);
list.add(user2);//只获取name属性
List l = (List) Ognl.getValue("#this.{name}", new HashMap<>(), list);
System.out.println(l);
}
集合投影
//集合选择
public void func17() throwsOgnlException {
List list = new ArrayList();
User user1= newUser();
user1.setName("Tom");
user1.setAge(17);
list.add(user1);
User user2= newUser();
user2.setName("Jerry");
user2.setAge(24);
list.add(user2);//只获取name属性
List l = (List) Ognl.getValue("#this.{?age>18}", new HashMap<>(), list);
System.out.println(l);
}
集合选择