struts2中%{}与${}与#区别

1、“#”符号有三种用途:   
(1)、访问struts中值栈对象),OGNL在不添加任何符号的情况下,默认访问的是ValueStack中的值,也就是说是Action中的属性和方法;如OGNL上下文和Action上下文,#相当于ActionContext.getContext()

举例:    

<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>      
<s:property value="#myMap['key1']"/>      
<s:url value="#myMap['key1']" />    
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>   
<s:property value="#myMap['key1']"/>   
<s:url value="#myMap['key1']"/>    

上面的代码第2行会在页面上输出“value1”,而第3行则会输出"#myMap['key1']"。

原因:在property标签中,value之后的字符串会自动被解析为OGNL表达式,但是URL标签在被struts解析的时候默认当做字符串对待,所以这里输出的是原字符串 。


(2)、用于过滤和投影(projecting)集合,如: books.{?#this.price>35}     

(3)、构造Map,如: #{'foo1':'bar1', 'foo2':'bar2'}     
#{'foo1':'bar1', 'foo2':'bar2'}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:    
<s:property value="#myMap['foo1']"/>     
<s:property value="#myMap['foo1']"/>   

 

2.%符号

%符号的用途是在标志的属性为字符串类型时,转换为计算OGNL表达式的值。让被理解为字符串的表达式,被真正当成ognl来执行。如下面的代码所示:
构造Map
<s:set name=”foobar” value=”#{’foo1′:’bar1′, ‘foo2′:’bar2′}” />

The value of key “foo1″ is <s:property value=”#foobar['foo1']” />

不使用%:<s:url value=”#foobar['foo1']” />

使用%:<s:url value=”%{#foobar['foo1']}” />

 

小结:

a) # 取得ActionContext的值

 

b) % 将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用

 

 

这里顺带提一下EL表达式


EL表达式:
1.基本格式:${}
2.4种取值范围:pageScope,requestScope,sessionScope,applicationScope
   ${requestScope.user.name}
3.基本运算:.和[]  .用于取属性[]用于取Array,List,Map,Set
   ${requestScope.map['apple']},${requestScope.list[1]}
4.{}里允许的运算:算术运算,关系运算,逻辑运算,empty/not empty空判断
   ${1+1}
   ${user.age<18}
   ${(user.age>18)&&(user.sex=='男')}
   ${empty user}判断user对象是否为空
5.EL的11个隐含对象
   pageContext,param和paramValues,header和headerValues,cookie,initParam和4种取值范围对象
    *pageContext可获取jsp的request,response,out,session,config,servletContext等对象
       ${pageContext.session.uesr}
    header
       ${header.host}
    *cookie
       ${cookie.key}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值