OGNL表达式struts2标签“%,#,$”ITeye - 乐橙lc8

OGNL表达式struts2标签“%,#,$”ITeye

2019年02月24日11时26分28秒 | 作者: 运华 | 标签: 表达式,标签,特色 | 浏览: 1371

OGNL(Object-Graph Navigation Language),大约能够了解为:目标图形化导航言语。是一种能够方便地操作目标特色的开源表达式言语。OGNL有如下特色:     1、支撑目标办法调用,方法如:objName.methodName();    2、支撑类静态的办法调用和值拜访,表达式的格局为@[类全名(包括包路)]@[办法名 |  值名],例如:    @java.lang.String@format(foo %s, bar)或@tutorial.MyConstant@APP_NAME;    3、支撑赋值操作和表达式串联,例如:    price=100, discount=0.8, calculatePrice(),这个表达式会回来80;    4、拜访OGNL上下文(OGNL context)和ActionContext;    5、操作调集目标。    二、运用OGNL表达式    OGNL要结合struts标签来运用。因为比较灵敏,也简单把人给弄晕,尤其是“%”、“#”、“$”这三个符号的运用。因为$广泛使用于EL中,这儿要点写%和#符号的用法。    1、“#”符号有三种用处:    (1)、拜访非根目标(struts中值栈为根目标)如OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的特色:    称号     效果     比如    parameters     包括当时HTTP恳求参数的Map     #parameters.id[0]效果相当于request.getParameter("id")     request     包括当时HttpServletRequest的特色(attribute)的Map     #request.userName相当于request.getAttribute("userName")     session     包括当时HttpSession的特色(attribute)的Map     #session.userName相当于session.getAttribute("userName")     application     包括当时使用的ServletContext的特色(attribute)的Map     #application.userName相当于application.getAttribute("userName")     注:attr 用于按request   session   application次序拜访其特色(attribute),#attr.userName相当于按次序在以上三个规模(scope)内读取userName特色,直到找到停止。用于过滤和投影(projecting)调集,如books.{?#this.price 100};结构Map,如#{foo1:bar1, foo2:bar2}。    (2)、用于过滤和投影(projecting)调集,如: books.{?#this.price 35}      books.{?#this.price 35}    (3)、结构Map,如: #{foo1:bar1, foo2:bar2}      #{foo1:bar1, foo2:bar2}这种方法常用在给radio或select、checkbox等标签赋值上。假如要在页面中取一个map的值能够这样写:     s:property value="#myMap[foo1]"/       2、“%”符号的用处是在标签的特色值被了解为字符串类型时,通知履行环境%{}里的是OGNL表达式。    这是一开始最让我不能了解的符号,原因是一些相关资源在表述时不太预备,通过一翻苦楚的探究,总算了解了它的用处。实际上就是让被了解为字符串的表达式,被真实当成ognl来履行。很有点相似javascript里边的eval_r()功用,例如 :    var oDiv = eval_r("document.all.div"+index)      var oDiv = eval_r("document.all.div"+index)    当index变量为1时,句子就会被当作var oDiv = document.all.div1  var oDiv = document.all.div1来履行。%{}就是起这个效果。举例:     s:set name="myMap" value="#{key1:value1,key2:value2}"/        s:property value="#myMap[key1]"/        s:url value="#myMap[key1]" /      上面的代码第2行会在页面上输出“value1”,而第3行则会输出"#myMap[key1]"这么一个字符串。 假如将第3行改写成这样:     s:url value="%{#myMap[key1]}"/       则输出为“value1”。    这说明struts2里不同的标签对ognl的表达式的了解是不一样的。假如当有的标签“看不懂”相似“#myMap[key1]”的句子时,就要用%{}来把这括进去,“翻译”一下了。    3、“$”有两种用处    (1)、在国际化资源文件中,引证OGNL表达式。    (2)、在Struts 2配置文件中,引证OGNL表达式:     action name="saveUser"  method="save"    result type="redirect" listUser.action?msg=${msg} /result    /action   

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章