Struts2的#、%{}、和%{#}的区别

本文详细解释了Struts2中OGNL表达式的使用方法,包括#和%{}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#:

#用来取根目录下的值,例如 session,request等等,取值的时候#session.key.属性名 ,这样会取到想要的对象的属性值。

#代表当前的意思可以取出堆栈上下文的存放对象,不在struts堆栈里,没有#表示从struts堆栈里取

如果从action中取属性值,则test中的属性值前面的'#'不需要

#通常强调从上下文取

当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可; 

当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或者#attr.; 

访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();

另外OGNL会设定一个根对象(root对象),在Struts2中根对象就是ValueStack(值栈)。如果要访问根对象(即ValueStack)中对象的属性,则可以省略#命名空间,直接访问该对象的属性即可。

在struts2中,根对象ValueStack的实现类为OgnlValueStack,该对象不是我们想像的只存放单个值,而是存放一组对象。在OgnlValueStack类里有一个List类型的root变量,就是使用他存放一组对象

,OGNL表达式需要配合Struts标签才可以使用。如:<s:property value="name"/>

注意:

在action中设置了该属性的setter/getter方法时,该属性才会取到,否则它不会被拦截器处理,value参数的类型是object,可以理解为这个默认是会解析成ognl表达式的。如果需要输入一个字符串<s:property value="'ddd'">注意,在value里面的ddd字符串外面加了单引号,这样不会将ddd解析成ognl表达式了。

%{}:

%{}类似于强转为值栈的数据类型

并且%用于OGNL标签嵌套时候用的,比如想把一个对象的值赋值给另外一个对象:

用%{}可以取出存在值堆栈中的Action对象,

 这是JSP2.1最新规范中的语法,是Struts2为其解决兼容性问题而写成%{#}的

%{}强调的是从你设定的root点取

  %{}用于计算表达式

  如%{10+20}结果将输出30

  如%{"a"+"b"}结果将输出"ab"

%{#}:

  在域对象中使用%{#}

  比如%{#session.user.userName}

  将获得user对象的 userName属性值    

  %{#}仍然用于计算表达式,只不过操作元可以是变量

如先定义一个变量

  <s:set name="age" value="%{25}"/>

  则%{#age}将输出25,也可以省略"#",写为%{age}

  若将age加10,可这么写:

  %{#age+10},将输出30.不能省略"#"。也就说变量用于计算时不能省略"#"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值