博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2 OGNL
阅读量:6607 次
发布时间:2019-06-24

本文共 3175 字,大约阅读时间需要 10 分钟。

  hot3.png

3、OGNL:Object-Graph Navigation Language

    3.1、OGNL基础

    对于OGNL而言,特别注意两点:

    1、存储值有两种方式:

        第一种:可以直接存储在root根对象中,之后根据OGNL的导航性可以直接获取到值。

@Test	public void test01() {		try {			User user = new User(1,"tangseng","唐长老");			Department dep = new Department("大唐雷音寺");			user.setDep(dep);			//第二个参数是root,直接从root中取值			System.out.println(Ognl.getValue("nickname", user));			System.out.println(Ognl.getValue("dep.name", user));		} catch (OgnlException e) {			e.printStackTrace();		}	}

        第二种:可以存储到一个map的Context中,也同样可以根据导航性获取到值(如果要获取map中的

        值需要使用#)。

@Test	public void test02() {		try {			//将值存储到了context的map中			Map
ctx = new HashMap
(); User user = new User(1,"tangseng","唐长老"); Department dep = new Department("大唐雷音寺"); user.setDep(dep); Role role = new Role(1,"超级管理员"); ctx.put("user", user); ctx.put("role", role); //以下表达式是在root中找,user是root System.out.println(Ognl.getValue("username", ctx, user)); //#user.username是在ctx这个map中找,如果不加#会去root中取值 System.out.println(Ognl.getValue("#user.username", ctx, user)); //加了#是在ctx中找,不加#是在root中找 System.out.println(Ognl.getValue("#role.name", ctx, user)); //目前root是ctx所以可以直接取得到 System.out.println(Ognl.getValue("role.name", ctx, ctx)); //Ognl其实就是一个大的context,根的key就是root,所以可以通过#root.xx来取值 System.out.println(Ognl.getValue("#root.username", ctx, user)); } catch (OgnlException e) { e.printStackTrace(); } }
List
users = new ArrayList
(); users.add(new User(1,"ts","唐僧")); users.add(new User(2,"wk","悟空")); users.add(new User(3,"bj","八戒")); users.add(new User(4,"ss","沙僧")); //如果要取list中的元素,需要通过#root[index]来完成取值 System.out.println(Ognl.getValue("#root[0].nickname", users));

    2、OGNL可以直接调用方法

//Ognl还可以完成方法的调用,可以直接调用root(user)中的sum()方法			System.out.println(Ognl.getValue("#root[0].sum(1,3)", users));						User user = new User();			//传递字符串的值必须加单引号''			System.out.println(Ognl.getValue("hello('world')", user));			//可以通过调用list中的get()方法获取某个下标的对象,然后完成导航			System.out.println(Ognl.getValue("get(0).nickname", users));
//可以调用静态的方法,使用@可以调用静态方法,注意@System之后没有.			Ognl.getValue("@System@out.println(sum(1,2))", user);

3.2、ValueStack

    1、struts2使用ValueStack来存储值,类图如下所示:

    2、运行过程

3.3、Struts2的常用标签

//放置在ActionContext中,使用#来取值		ActionContext.getContext().put("age", 20);		this.setUsername("老李");		this.setPassword("123");		List
users = new ArrayList
(); users.add(new User(1,"ts","唐僧")); users.add(new User(2,"wk","悟空")); users.add(new User(3,"bj","八戒")); users.add(new User(4,"ss","沙僧")); ActionContext.getContext().put("users", users); //此时u就是root的第一个元素了,在页面中默认就会先访问这个对象,而不是action中的 User u = new User(10,"laozhang","老张"); ActionContext.getContext().getValueStack().push(u);

User List

${username } ----- ${password }
-----
${aaa }--------${bbb }
-------
-------
${hello }
--------

User Show

年龄小于10
未成年
已经成年

    迭代标签:

style="background:#ff0"
>
-----
-----
-----
-----

 

转载于:https://my.oschina.net/pmos/blog/778558

你可能感兴趣的文章
浅谈ARP***
查看>>
Linux 管道
查看>>
loadrunner之录制下载文件
查看>>
Cacti模板
查看>>
Delete a failed Domain Controller object from Active Directory
查看>>
7-19
查看>>
[AWS vs Azure] 云计算里AWS和Azure的探究(1)
查看>>
两张图看懂原型链
查看>>
我的友情链接
查看>>
mysql教学课件
查看>>
OA办公系统设计的7大原则
查看>>
[转]U-BOOT内存布局及启动过程浅析
查看>>
RabbitMQ的几种典型使用场景
查看>>
MySQL性能优化之参数配置
查看>>
prepareStatement的用法和解释
查看>>
[转载] A goal deliberation strategy for BDI agent systems
查看>>
java 时间简单电话簿 初学者入门
查看>>
Python线程与进程的区别
查看>>
TCP之backlog
查看>>
nagios监控mysql
查看>>