Struts 2的OGNL表达式

[table]
||
[/table] Struts 2的OGNL表达式

标准的OGNL会设定一个根对象(root对象)。假设使用标准OGNL表达式来求值(不使用Struts 2的OGNL表达式),如果OGNL上下文(OgnlContext Map类型)有两个对象:foo对象,在OgnlContext中名称为foo;bar对象,在OgnlContext中名称为bar。同时foo对象被设置为根对象(root)。则利用下面的OGNL表达式求值:
//返回foo.getBlah();
#foo.blah
//返回bar.getBlah();
#bar.blah
//返回foo.getBlah();
blah

★ 说明 ★

使用OGNL是非常简单的,如果要访问的对象不是根对象,如示例中的bar对象,则需要使用命名空间,用“#”来标识,如“#bar”;如果访问一个根对象,则不用指定命名空间,可以直接访问根对象的属性。
在Struts 2框架中,值栈(Value Stack)就是OGNL的根对象,假设值栈中存在两个对对象实例:Man和Animal,这两个对象实例都有一个name属性,Animal有一个species属性,Man有一个salary属性,假设Animal在值栈的顶部,Man在Animal后面,下面的代码片断会帮助读者更好地理解OGNL表达式:
//调用animal.getSpecies();
species
//调用man.getSalary();
salary
//调用animal.getName();
name;
最后一行示例代码,返回的是animal.getName()返回值,即返回了Animal的name属性,因为Animal是值栈的顶部元素,OGNL将从顶部元素搜索,所以会返回Animal的name属性值。如果要获得Man的name值,则需要如下代码:man.name
Struts2允许在值中使用索引:
[0].name //调用animal.getName();
[1].name //调用man.getName();
★ 注意 ★

使用索引,并不是直接获得指定的元素,而是从指定的索引位置搜索。

Struts2 中的ONGL Context是ActionContext主要对象如下:
Context Map-----application,session,(值栈)root,request,parameters,attr.
OGNL表达式

OGNL表达式语言

<o:p></o:p>

一 常量

<o:p></o:p>

Char
‘a’

String
‘hello’ 或 “hello”

单个字符 /”a/”

Boolean
true | false

Int
123


<o:p></o:p>

注意:string可以用单引号也可以用双引号。但是单个字母 如’a’与”a”是不同的,前者是char, 后者是string。

<ww:property value=”\”a\””> 或<ww:property value’”a”’>

<o:p></o:p>

二 操作符号

+

-

*

/

mod
1+1 ‘hello’+’world’

<o:p></o:p>

++ --
foo++

== !=
<o:p></o:p>

in not in
foo in aList

= 赋值
foo=1


<o:p></o:p>

三 方法调用

class Muppet{

int fun();

}

调用:fun()-10

<o:p></o:p>

四 访问静态方法和变量

@some.pkg.SomeClass@CONSTANTS

@some.pkg.SomeClass@someFun()

<o:p></o:p>

五 context

ActionContext().getContext().getSession().get(“kkk”)
#session.kkk

ActionContext().getContext().get(“person”)
#person


# 符号相当于ActionContext.

ActionContext 中的主要对象: parameters, attr, request, session, application

<o:p></o:p>

六 集合操作

list & array访问

list.get(0) array[0]
list[0] array[0]

list.get(0).getName()
list[0].name

list.size() array.length
list.size array.length

list.isEmpty()
list.isEmpty

List list = new ArrayList()

list.ad(“foo”); list.add(“bar”);
{“foo”, “bar”}

{1,2,3}


<o:p></o:p>

Map

map.get(“foo”)
map[‘foo’] 或 map.foo

map.get(1)
map[1]

Map map = new HashMap()

map.put(“k1”, “v1”); map.put(“k2”,”v2”);
#{“k1”:”v1”, “k2”:”v2”}


<o:p></o:p>

<o:p></o:p>

<o:p></o:p>

七 筛选 与 投影

筛选 collection.{? expr }: #this 代表当前循环到的object

投影 collection.{ expr }

<o:p></o:p>

children.{name}
(投影)得到 Collection<String> names, 只有孩子名字的list

children.{?#this.age>2}
(筛选)得到 collection<Person> age>2的记录

children.{?#this.age<=2}.{name}
先筛选再投影

children.{name+’->’+mother.name}
(筛选)得到元素为 str->str 的集合


<o:p></o:p>

NOTE : #的三种用途

1. 引用 ActionContext 中的object #person

2. 动态创建map #{1:’a’, 2:’b’}

3. 对集合进行筛选(#this) #this

<o:p></o:p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值